栈 stack 系统自动分配
在函数中声明一个局部变量
系统自动在栈中为变量开辟内存空间
堆 heap 按需申请
C语言 malloc free
char *p = NULL;
p = (char*)malloc(9);
printf("%p\n",p);
free(p);
// c++ free delete
p = new char[9];
printf("%p\n",p);
delete[] p;
栈 自动管理 效率高
堆 手动管理 内存碎片
空闲内存地址链表,寻找第一个空间大于所申请空间的堆节点,
然后将该节点从空闲节点链表中删除,并将该节点的空间分配给程序
栈 向低地址扩展 连续 空间较小
堆 向高地址扩展 不连续 空间较大
new和malloc的区别