2-16 malloc(1)

动态分配内存
memory alloc malloc
1.malloc C库函数 内部封装了brk。
2.int brk(void *addr); linux;

结构:
app
库 lib
API
OS
hard


由于对齐,可能分配内存会取4的倍数
int *p;
p=malloc(4); 4字节
void free(void*ptr);//释放,和malloc对应 ptr为申请内存块的地址,不能知道执行成不成功。

#include<stdio.h>
#include<stdlib.h>
int main()
{
int*p;
char buf[32];
p=(int*)malloc(sizeof(int));
...
free(p);
return 0;
}

free一定要释放heap的内存。

内存结构:
stack 局部变量 函数调用 自顶向下 10M
heap 自底向上 malloc分配的空间
bss 没有初始化的全局变量
data 全局变量
redata 常量
text 二进制

递归 stack smash(产生过多栈针)

当进程结束,动态分配才会还给系统。
free只是autorelease

当申请n个字节空间时,不只n个空间,前面有个管理结构(4字节)

malloc 8字节对齐
1000 8
10000 16
11000 24
后三位都为0
所以得出4字节的管理机制的后三位为0
最后一位说明内存是否可用。0表示不可用 1表示可用

int main(int argc,char*argv[])
{
int *p,*q;
int n;
n=atoi(argv[1]); //string->int
p=(int*)malloc(n);
q=(int*)malloc(8);
printf("%x,%d/n",p[-1],(unsigned)q-(unsigned)p); //p[-1]为管理结构
free(p);
free(q);
}

如果分配16个字节,则需要分配20个字节,但是不能被8整除,所以4字节填充。

你可能感兴趣的:(C++,c,linux,OS,C#)