堆和栈的区别:
1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。
2、堆区(heap)— 一般由程序员分配释放,手动释放。
|
栈 |
堆 |
申请方式 |
系统自动分配 |
程序员自己申请 |
申请大小限制 |
向下生长,连续的内存空间 栈的大小是固定的,申请超过提示overflow |
不连续的内存区域(链表) 大小受限于虚拟内存 |
执行效率 |
栈自动分配,效率快 |
手动分配效率慢,容易产生碎片 |
申请空间命名方式不同 |
有名分配,用其名字来访问 |
匿名分配,只能通过指针访问 |
new和malloc的区别
New/delete |
Malloc/free |
C++运算符 |
C/C++标准库函数 |
自动计算所需要分配的空间大小 |
手工计算 |
返回对象指针 |
返回void指针 |
能调用构造函数/析构函数 |
不能(不能申请自定义类对象) |
进程和线程
|
进程 |
线程 |
概念 |
资源分配的基本单位 调度运行的基本单位 |
程序执行的最小单位,执行处理机调度的基本单位 |
地址空间 |
独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种非常昂贵的多任务工作方式 |
共享进程中的数据,切换线程花费小,创建线程开销小 |
通信 |
进程间通信 |
共享数据,快捷方便,但要处理好同步互斥的关系 |