C语言中 struct成员变量顺序对内存的占用
2013-08-30 18:45
375 查看
在C语言的结构体中,是会按照其变量类型来进行分配内存大小的。但是对于不同的编译器,结果是不同的,在VC++6.0中是怎么个分配情况呢?用一下C中的关键字sizeof()来测试下,注意sizeof()不是函数哦!只是关键字而已。下图就是在VC++6.0中的字节分配情况:
下面来分析一下,C中结构体中成员变量的写法,对占用内存的影响。
却发现结果不是13个字节?却是24个字节?为什么呢?哦!肯定是编译起的问题,对,没错,就是编译器的问题,VC++6.0是按照8个字节来对齐的,只要不满足或者暂时不满足这样编排的,就会被排到下一个8个字节中。所以上面中 int 会在一个8个字节中,double 一个8个字节 char也是8个字节。这样多不划算啊!
好我们在结构体中把各个结构体成员变量顺序变一下,看下占用多少内存
从上面看出,只是把成员变量换了下位置,就节省了8个字节哦!那在用VC编译器编译的时候,怎么做能是内存最少呢?这就可以自己编排下,原则就是8个字节为一组,不足8个字节的会被分配到一组,按顺序分配的,所以尽量把不足8个字节的类型放在一起,思路就是这样,平时编程中稍微注意下就可以了。
下面来分析一下,C中结构体中成员变量的写法,对占用内存的影响。
却发现结果不是13个字节?却是24个字节?为什么呢?哦!肯定是编译起的问题,对,没错,就是编译器的问题,VC++6.0是按照8个字节来对齐的,只要不满足或者暂时不满足这样编排的,就会被排到下一个8个字节中。所以上面中 int 会在一个8个字节中,double 一个8个字节 char也是8个字节。这样多不划算啊!
好我们在结构体中把各个结构体成员变量顺序变一下,看下占用多少内存
从上面看出,只是把成员变量换了下位置,就节省了8个字节哦!那在用VC编译器编译的时候,怎么做能是内存最少呢?这就可以自己编排下,原则就是8个字节为一组,不足8个字节的会被分配到一组,按顺序分配的,所以尽量把不足8个字节的类型放在一起,思路就是这样,平时编程中稍微注意下就可以了。
相关文章推荐
- C语言中 struct成员变量顺序对内存的占用
- C语言struct内存占用问题
- C语言中的全局变量内存分配和初始化顺序
- 关于构造函数析构函数以及成员变量内存分配顺序的一些问题
- C语言struct内存占用问题
- C语言中的全局变量内存分配和初始化顺序
- C语言struct内存占用问题
- C语言定义结构体时注意成员变量的类型和声明顺序
- 深入理解C语言结构体成员变量内存分配
- java开发C语言解释器:结构体内存与成员变量的一致性
- 受检查异常要求try catch,new对象时,就会在堆中创建内存空间,创建的空间包括各个成员变量类型所占用的内存空间
- c / C++ 中的struct 和memcpy函数 class 对象成员变量内存是否连续
- 内存对齐-C语言struct内存占用问题
- C语言之struct大小、首地址与内存对齐—由结构体成员地址得到结构体首地址
- windows下变量在内存中的字节存储顺序(c语言)
- C语言struct内存占用问题
- C语言中结构体偏移及结构体成员变量访问方式的问题讨论
- c++11 中成员变量初始化的顺序
- 总结笔记-c++成员变量、构造函数以及析构函数的执行顺序
- c语言中结构体成员变量加“点”问题