最基础问答

来源:互联网 发布:java九阴真经 编辑:程序博客网 时间:2024/05/21 13:58

堆和栈的区别:

1、栈区(stack由编译器自动分配释放,存放函数的参数值局部变量的值等。

2、堆区(heap一般由程序员分配释放,手动释放。

 

申请方式

系统自动分配

程序员自己申请

申请大小限制

向下生长,连续的内存空间

栈的大小是固定的,申请超过提示overflow

不连续的内存区域(链表)

大小受限于虚拟内存

执行效率

栈自动分配,效率快

手动分配效率慢,容易产生碎片

申请空间命名方式不同

有名分配,用其名字来访问

匿名分配,只能通过指针访问

 

newmalloc的区别

New/delete

Malloc/free

C++运算符

C/C++标准库函数

自动计算所需要分配的空间大小

手工计算

返回对象指针

返回void指针

能调用构造函数/析构函数

不能(不能申请自定义类对象)

 

 

 进程和线程

 

          进程

        线程

概念

资源分配的基本单位

调度运行的基本单位

程序执行的最小单位,执行处理机调度的基本单位

地址空间

独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种非常昂贵的多任务工作方式

共享进程中的数据,切换线程花费小,创建线程开销小

通信

进程间通信

共享数据,快捷方便,但要处理好同步互斥的关系

原创粉丝点击