在学习c/c++时可能会遇见如下面这样的问题:结构体定义如下,
利用sizeof()求该结构体及其成员所占内存空间的大小时
输出为
我用的系统是64位的,所以指针所占内存为8,结构体的内存是24,也就是指针所占内存的3倍,故结构体所占内存=其中成员所占最大内存*成员数。但是,再来看下面,结构体定义如下,跟之前处理换了位置其他没变,
输出却为
也就是说,计算机会更智能的开辟内存空间,尽量减少内存空间的损耗。再说清楚点,就是结构体对象所占空间是一段连续的内存,是有一定顺序的,比如上面的第一个例子,是int、指针、int类型,因为要内存对齐,这样访问效率高且兼容,所以它们实际依次所占内存空间为8、8、8,int后面所占的4个空间没有储存意义;而第二个例子,顺序是int、int、指针类型,因为计算机会更智能的开辟内存空间,所以它们实际所占内存为4、4、8,把int换成其他类型也是同样的道理。但为什么内存又没对齐呢?其实想要内存对齐,保持效率且兼容,就用像第一个例子那样的就行。再来看看这两个例子的访问次数,很容易看出第一个例子获取数据时访问一次,因为实际所占内存空间都为8,第二个例子实际访问次数为2次(先4访问一次,再8访问一次)。一般写代码时一般会相同类型的写一起,这样会节省一些内存。具体看实际情况。
(以上纯属个人理解,如有错误请纠出,谢谢)