介绍下C++中的内存对齐?

2021-01-01 109 0

还是用一个例子带出这个问题,看下面的小程序,理论上,32位系统下,int占4byte,char占一个byte,那么将它们放到一个结构体中应该占4+1=5byte;但是实际上,通过运行程序得到的结果是8 byte,这就是内存对齐所导致的。

//32位系统
#include<stdio.h>
struct{
    int x;
    char y;
}s;

int main()
{
    printf("%d\n",sizeof(s);  // 输出8
    return 0;
}

现代计算机中内存空间都是按照 byte 划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但是实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐。

相关文章

简述 private、 protected、 public、internal 修饰符的访问权限
new和malloc的区别
堆和栈的区别?
构造函数为什么一般不定义为虚函数?而析构函数一般写成虚函数的原因 ?
什么情况下会调用拷贝构造函数?
介绍下抽象类、接口类、聚合类?

发布评论