内存基础
# 一个可执行程序占用的内存分为哪几个区?
- C语言在内存中一共分为如下几个区域,分别是: 内存从低到高的分布
- 命令行参数和环境变量
- 栈(从高地址往低地址增长): 局部变量/局部常量(const)[局部只读变量]/函数调用时返回地址/调用者的环境信息(例如某些机器寄存器).
- 由编译器自动分配释放管理.
- windows下,申请的栈空间一般为2MB。
- Linux默认的栈空间是8MB,可以用ulimit -s 命令来修改。
- 堆(从低地址往高低至增长): 所使用的局部变量还是在栈上,内容则在堆上.手动释放或者程序结束时由操作系统释放回收.
- 由程序员分配[new/malloc/realloc/calloc].
- windows下, 申请的堆空间一般小于2GB。
- 未初始化数据段[.bbs]: 未初始化的全局变量/未初始化的(局部/全局)静态变量(static修饰的变量).
- 初始化数据段: 初始化的全局变量/初始化的(局部/全局)静态变量(static修饰的变量)。
- 代码段[.text]: 存储机器码序列/全局常量/代码/字符串常量.
- 静态内存分配和动态内存分配 一个程序被加载到内存中,这块内存首先就存在两种属性:静态分配内存和动态分配内存。 静态分配内存:是在程序编译和链接时就确定好的内存。 动态分配内存:是在程序加载、调入、执行的时候分配/回收的内存。