内存属性 1. 大小 2. 位置
内存分布(从高到低)
- 内核空间(应用程序不许访问)
- 栈空间(局部变量)
- 运行时的堆空间 (malloc)
- 全局数据空间
- 初始化的data
- 未初始化的bss
- 只读数据段(一些字符串啥的)
- 代码段(code)(只读)
- 0x0
size build
查看构建的各部分大小
strings build
取出字符串
nm build
看标签的
栈空间
运行时,函数内部使用的变量,函数一旦返回就释放
堆空间
运行时,可以自由分配和释放
分配
malloc()
一旦成功,返回分配好的地址,只需要接受,对于地址读法由程序员决定,输入参数指定分配的大小,单位B
int a[5]; malloc(5*sizeof(int))
//如果未成功的保护函数
if(p == NULL){
error
}
char *p;
p = (char *)malloc();
释放
char *p;
p = (char *)malloc();
//释放
free(p);
只读空间
静态空间,编译时就以确定,整个程序结束释放,生存周期最长