网站流量 收益,刷关键词排名软件有用吗,网站建设实训心得 总结,简繁英3合1企业网站生成管理系统V1.6前两天面试某公司时#xff0c;没有回答上的一个问题#xff0c;总结如下#xff0c;以供参考。 问#xff1a;下面这个结构类型的实例变量占用多少内存#xff1a; struct struct1 { int i; short j; char c; }; 我反问#xff1a;是啥语言啥机器啥编译环境… 前两天面试某公司时没有回答上的一个问题总结如下以供参考。 问下面这个结构类型的实例变量占用多少内存 struct struct1 { int i; short j; char c; }; 我反问是啥语言啥机器啥编译环境 他回答说VC6.0下。 我内存对齐后占8byte。 他又继续问如何让它只占7byte 我的第一反应是使用位段正准备回答又感觉不对位段不能让它不对齐啊。又想了几秒钟还是不会只好回他说没玩过…… 今天下午去图书馆翻了下《代码优化有效使用内存》发现里面提到了两种方法法1 #pragma pack(push) #pragma pack(1) struct struct1 { int i; short j; char c; }; #pragma pack(pop)法2 修改编译指令的参数来禁止内存对齐VC /Zn1(VS2005下右击项目-属性-配置属性-C/C-代码生成-结构成员对齐-选“1字节(/Zn1):”(即禁止内存对齐),默认是使用默认值即按照结构中占用空间最大的成员进行对齐。的size进行对齐。Borland C /-a1法2是对整个项目禁用内存对齐,而法1可以针对特定的结构禁用内存对齐,其提供了更大的灵活性. 另外该书中还提到 char不对齐 short沿偶地址对齐 int/float沿取值为4的倍数的地址对齐。 double沿取值为8的倍数的地址对齐。 VS2005下默认是使用默认值即按照结构中占用空间最大的成员进行对齐我们可以测试下面这个结构 struct struct2 { char i; short d; double c; short j; }; //保持为默认值或修改编译参数/Zn?猜下sizeof结果为多少:) printf(struct2:%d\n,sizeof(struct2)); struct2 st; printf(%p\n,st.i); printf(%p\n,st.d); printf(%p\n,st.c); printf(%p\n,st.j); 补充数据的手工对齐 char *p; int temp align_power-1; p(char*)malloc(need_size temp; p(char*)malloc(((int)ptemp)temp);//修改了p所以释放p前记得要归位 注align_power是所需要的对齐幂char*也可以为int*是指针类型。另外释放p之前记得让其指向所申请的内存的首地址上。 本文转自Silent Void博客园博客原文链接http://www.cnblogs.com/happyhippy/archive/2006/11/10/601224.html如需转载请自行联系原作者