C语言——结构体内存分配问题
发布时间
阅读量:
阅读量
结构体的内存分配方案个人认为是比较让人头疼的。它需要遵循一定的规则或原则,其中最核心的就是地址对齐原则,有时也会被称为内存对齐,具体叫法并不重要,反正我是只负责调用接口的人,只要能正常运行就行。
好了,先有这么一个概念,什么是内存对齐,先丢一边。……~(~o ̄▽ ̄)~o 。。。滚来滚去……o~(_△_o~) ~。。
设char占用1个字节,int占用4个字节。
那么问题1
struct A
{
char a;
int a0;
}ma;
char a1;
a1 = sizeof(ma);
下面是在keil中仿真的结果

?_?,为什么是8???,不是5?
是的,
它不是5,
在编译器内部,
确保非连续变量取址后的结果能够被结构体基址整除。
同时要求结构体基址必须能够被占用内存中最大数据类型所需的字节数整除。
此外,
偏移地址需与之相匹配或对齐。
换句话说,
在为非连续变量分配内存时,
即使像a0这样的char型变量,
在编译器仍为其预留了足够的空间。
关于偏移地址对齐的问题,在编程语言设计中存在一定的争议性观点。我的看法是:当编译器为结构体分配内存空间时,若变量地址不
全部评论 (0)
还没有任何评论哟~
