本文将针对C++中内存管理及变量存储位置进行总结。
内存对齐
在现代计算机系统中,我们需要考虑代码编译后在内存中的布局与使用方式,由此引出了内存对齐的概念。
内存对齐的原因
速度
CPU不是按照字节对内存进行存取的,而是按照字(双字节、四字节或八字节),这个单位就叫存取粒度,经过对齐,CPU能够确保读取的是干净的数据而不需要做额外的移位处理,因此可以提高读取速度。这算是以空间换取时间的一种措施。
支持原子操作
经过对齐的内存存取可以保证读取或写入是一次完成的,这可以使CPU支持原子操作。
C++代码及变量存储位置
- 栈:程序自动分配,编译器在需要时分配,不需要使自动清除,用于保存局部变量
- 堆:手动内存分配时的区域,需要手动释放
- 常量存储区:存放常量,不允许修改,编译时分配,程序退出时销毁
- 全局/静态存储区:保存全局变量和局部静态变量,编译时分配内存,退出时销毁,默认设置存储变量为0
- 代码存储区:函数体等代码存储位置