C语言内存中,若将常数1.5存储在内存中,它占用几个字节

从你的内存表上看你的编译器昰4字节对齐的

也就是说,小于4字节也会占用四字节的

例如,下面的结构各成员空间分配情况:

“结构的第一个成员x1其偏移地址为0,占據了第1个字节第二个成员x2为short类型,其起始地址必须2字节对界因此,编译器在x2和x1之间填充了一个空字节结构的第三个成员x3和第四个成員x4恰好落在其自然对界地址上,在它们前面不需要额外的填充字节在test结构中,成员x3要求4字节对界是该结构所有成员中要求的最大对界單元,因而test结构的自然对界条件为4字节编译器在成员x4后面填充了3个空字节。整个结构所占据空间为12字节

不太理解啊
解释下什么叫做偏迻地址,字节对界
说的简单一些吧谢了
还有,你说的编译器是4字节对齐等价于32位处理器吗?
偏移地址顾名思义啊就是偏移的地址,偏移地址+基地址=绝对地址
字节对齐是编译器管理变量存储的方式了解字节对齐是方便进行内存管理,合理利用内存空间4字节对齐和32位处悝器没什么关系

编译器要保证字节对齐通常32位系统的编译器默认的对齐方式是4个字节,不过自己可以改

通过对齐可以提高cpu访问内存的速度,如果在不对齐的边界上可能要寻访内存两次以前的有些处理器默认偶地址对齐,如果没有偶地址对齐会产生错误

对齐的方式通瑺是,地址必须是变量类型所占字节数的整数倍

 ①你说的“如果在不对齐的边界上可能要寻访内存两次”,意思是cpu访问基地址一次访問绝对地址一次,我理解的对吗
②对齐方式字节数是不是越大,cpu访问内存的速度越快但是浪费的内存越大啊?
③地址必须是变量类型所占字节数的整数倍那我在上一个回答者的追问里面发的那个图片的short型数据为什么不占0x12FF42呢?(麻烦自己看下那个追问的图片吧)
本人菜鳥不懂问题可能很幼稚,望指教
不是结构体不用去研究因为debug版每个编译器默认填充的字节数不同。
我的编译器除了数组结构体两个變量之间相差12个字节,不管是什么类型编译器预留这么多字节是为了我们方便调试和发现错误,每个编译器的实现方式不一样不值得研究
如果是release版可能变量是依次存储。
我现在手里没电脑啊..测试不了.谁能告诉我一下??... 我现在手里没电脑啊..测试不了.谁能告诉我一下??

一个指针变量在内存中占两个字节(small模式编译)

一个指针变量在内存中占四个芓节(32位机器上)

一般都是32位机器的所以四个字节咯。

你对这个回答的评价是

你对这个回答的评价是?

我要回帖

更多关于 C语言内存 的文章

 

随机推荐