再谈内存分配与对齐

    技术2022-05-20  32

    先看几段代码

    1、堆中开辟内存 char *x = new char[5]; char *y = new char[8]; cout<<(int)(x-y)<<endl; 结果:-16 2、全局区内存 char x; int y; char z; void main(int argc,int **argv) { cout<<(int)&x<<endl<<(int)&y<<endl<<(int)&z<<endl; } 结果: 4207549 4207552 4207548 3、栈中内存 void main(int argc,int **argv) {    char x;    int y;    char z;    cout<<(int)&x<<endl<<(int)&y<<endl<<(int)&z<<endl; } 结果: 1245051 1245052 1245050 4、常量内存区 char *x = "1"; char *y = "0"; cout<<(int)x<<endl<<(int)y<<endl; 结果: 4202876 4202880 char *x = "1111"; char *y = "1111"; cout<<(int)x<<endl<<(int)y<<endl; 结果: 4202876 4202876 由以上结果可以得出以下结论: (1)堆中开辟内存,最小块为16,每次开辟以16为单位 (2)全局区内存,栈中内存,编译将会根据所有变量的实际情况进行内存重新布局,达到最优 (3)常量区内存,4字节对齐(?)


    最新回复(0)