C++程序内存示例
把内存简化地分为:堆、栈、全局区/静态区、常量区。
1.栈(stack)
由编译器管理,放形式参数、局部变量
2.堆(heap)
由程序员管理,操作系统在程序结束时释放,new出来的
3.全局区/静态区(global/static)
程序结束时释放,放全局/静态变量
4.常量区(Constant)
内容不可修改。
图示:
…低地址… [ 常量区 | 全局/静态区 | 堆 | … | 栈 ] …高地址……
堆向高地址方向生成;
栈向低地址方向生成。
普通变量内存模型
int a;
变量名a,a的地址是&a。
数组内存模型
int a[];
a是数组a[]的首地址别名,*(a+1)中的1是一个元素位置,元素类型跟随a。
因此*(a+1)是数组中的第二个字节,以此类推。