C语言。设计一个通信录的结构体类型,并画出该结构体变量在内存的存储形式? 50
1个回答
展开全部
结构体在内存中的存储方式,和常规的C语言变量、常量存储方式类似,唯的不同在于对齐。
只所以要进行数据对齐是因为编译器对结构的存储的特殊处理能提高CPU存储变量的速度,一般来说,32位的CPU内存以4字节对齐,64位的CPU的以8字节的对齐。一般可以使用#pragma pack()来指出对齐的字节数。比如下面的代码,在debug会显示结构体test的内存大小为28,如果生成release版则所占内存大小为32 。
#include <stdio.h> #ifdef _DEBUG#pragma pack(4)struct test{ char x[13]; // 13 int d; // 4 double f; // 8}ss;#else#pragma pack(8)struct test{ char x[13]; // 13 int d; // 4 double f; // 8}ss;#endif int main(void){ printf("%d\n", sizeof(ss)); return 0;}
只所以要进行数据对齐是因为编译器对结构的存储的特殊处理能提高CPU存储变量的速度,一般来说,32位的CPU内存以4字节对齐,64位的CPU的以8字节的对齐。一般可以使用#pragma pack()来指出对齐的字节数。比如下面的代码,在debug会显示结构体test的内存大小为28,如果生成release版则所占内存大小为32 。
#include <stdio.h> #ifdef _DEBUG#pragma pack(4)struct test{ char x[13]; // 13 int d; // 4 double f; // 8}ss;#else#pragma pack(8)struct test{ char x[13]; // 13 int d; // 4 double f; // 8}ss;#endif int main(void){ printf("%d\n", sizeof(ss)); return 0;}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询