内存属性 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);

只读空间

静态空间,编译时就以确定,整个程序结束释放,生存周期最长