社区
C#
帖子详情
C#中的指针问题!
cd7809
2002-04-14 09:59:46
.NET 中通常会给某些数据类型加上一些空间, 使他们占据的内存是4字节的倍数,
比如short X = 10; 那么变量X应该占用4个字节的内存,
我的问题是short pX = &X; 当++pX;的时候,指针是向上移动4个字节,还是2个?
...全文
34
8
打赏
收藏
C#中的指针问题!
.NET 中通常会给某些数据类型加上一些空间, 使他们占据的内存是4字节的倍数, 比如short X = 10; 那么变量X应该占用4个字节的内存, 我的问题是short pX = &X; 当++pX;的时候,指针是向上移动4个字节,还是2个?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qqchen79
2002-04-15
打赏
举报
回复
计算最好采用和CPU寄存器相同的宽度,内存读取最好采用和总线相同的宽度,
在32位上8/16/32位都一样。
是32位CPU选择了处理数据的速度,而不是相反。
cd7809
2002-04-15
打赏
举报
回复
非常感谢!
cd7809
2002-04-14
打赏
举报
回复
那么我的理解就是cpu最好按照8位计算,这样速度快,
而32位和8位速度完全相同, 所以采用了32位,而16位就不一样了对吧,
如果是这样的话,我还有两点不明白,
一是为什么8位计算速度就比16快呢,而32位和8位一样?
二是速度是选择32的唯一原因吗?
谢谢!
qqchen79
2002-04-14
打赏
举报
回复
.NET是32位的,出于跨平台考虑,即使在64位的系统上.NET自身也还是32位。
我前面说了在内存中的时候系统总是尽量采用最紧密的排列方式,不轻易的加入用于对齐的附加字节,不会有很多的内存浪费。但也不保证和你书写的顺序一致。
运算过程必须保持32位是可以理解的,在32位的CPU上8位加法和32位加法速度完全相同,总线级的内存读取也是32位,也就是说读32位数据和8位没区别。
cd7809
2002-04-14
打赏
举报
回复
说的好,
不过我就不明白的是c#到底是64bit还是32bit, 应该是64bit吧,不过这样的
话我储存一个short就要占8个字节??
这能反映出c#的好处吗?
qqchen79
2002-04-14
打赏
举报
回复
short* pX = &X;
++ pX;
应该是移动两个字节的。因为在数组里short的存储是compact的,不然台浪费空间了。
除了数组以外,只有指定类StructLayout的valuetype里可以使用上面的方法,对于其它情况(比如函数的local variable)不行,因为中间还有一层JIT,可能会调整内存的结构,不能对此有任何假设。
.NET里明确规定的内存填充是在Evaluat Stack上,也就是说,不过什么类型的数据,load到求值堆栈上至少要占4bytes,对于在heap和local var的内存情况,.NET没有规定。另外,影响空间Pack/Align的因素还有很多,比如CPU,64位通常采用8bytes的Align,32位通常是4bytes的Align。
cd7809
2002-04-14
打赏
举报
回复
对不起, 写错了,是short *pX = &X;
TO : lonk(小鱼)
有啊, 在《c#高级编程》的282页写着。
lonk
2002-04-14
打赏
举报
回复
为什么要在c#中用指针呢?对于简单数据类型,我没听说过占用的内存
被弄成是4字节的倍数.
c#
100例
这个是
c#
实例,对初学
c#
的朋友们是很有用处的……
[
C#
]
C#
中
的
指针
C#
在有限的范围内支持
指针
。
C#
的
指针
只不过是一个持有另一类型内存地址的变量。但是在
C#
中
,
指针
只能被声明为持有值类型和数组的内存地址。与引用类型不同,
指针
类型不被默认的垃圾收集机制所跟踪。出于同样的原因,
指针
不允许指向引用类型,甚至不允许指向包含引用类型的结构类型。我们可以说,
指针
只能指向非托管类型,包括所有基本数据类型、枚举类型、其他
指针
类型和只包含非托管类型的结构。 声明
指针
类型 声明
指针
类型的一般形式如下所示, type *variable_name; 其
中
* 称为取消引用运算符。例如下面的语
c#
语言
中
代替
指针
,手把手教你
C#
中
指针
的使用方法
手把手教你
C#
中
指针
的使用方法
C#
是一门解释型语言,其
中
对
指针
进行了封装,因此用户无法直接调用对象的
指针
。但是当使用
C#
调用C/C++的DLL时,常常会函数参数或者返回值为
指针
的情况。这种情况下就需要对
指针
进行操作。在
C#
中
使用
指针
,需要首先回答以下几个
问题
:1.
C#
提供了哪几种
指针
类型
C#
提供的
指针
为IntPtr或者UIntPtr,用于表示
指针
或句柄的平台特定类型。因此,IntPtr 可以用来...
C#
中
的
指针
及其用法
我们了解了如何声明和初始化
指针
,访问
指针
指向的值,进行
指针
的算术运算以及
指针
与数组的结合使用。然而,需要注意的是,
指针
的使用需要谨慎,并且需要在编译时启用。
指针
是一种强大而灵活的概念,它允许我们直接访问和操作内存
中
的数据。在本文
中
,我们将详细介绍
C#
中
的
指针
及其用法,并提供相应的源代码示例。此外,
指针
的使用也带来了一些潜在的风险,如悬空
指针
和内存泄漏等
问题
。
C#
中
的
指针
还支持算术运算,包括
指针
的加法和减法。将
指针
向后移动一个位置,再次打印
指针
指向的值。将
指针
向前移动一个位置,并再次打印
指针
指向的值。
在
C#
中
使用
指针
使用
指针
后,可以进行低级的内存访问,但这是有代价的,使用
指针
的语法比引用类型的语法复杂得多,而且
指针
使用起来也比较困难,需要较高的编程技巧和强力。另外,如果使用
指针
,就必须授予代码运行库的代码访问安全机制的高级别信任,否则就不能执行它。如果一个不安全的上下文要与这个对象(或这个堆上的任何对象)交互,就可能会出现
问题
,因为垃圾回收可随时发生。但这块内存是在栈上的,当分配方法返回的时候,被分配的内存立即被清理。操作符构建数据类型相对应的
指针
类型(
指针
类型、值类型和引用类型,示例代码
中
的。仅与基础类型一起写入;
C#
111,125
社区成员
642,540
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章