再谈内存分配与对齐

先看几段代码

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值