内存空间、堆、栈区别

进程之间内存空间独立,不可互相访问。

每个进程可以有多个线程,线程之间共享内存空间。但是,每个线程有自己独立的栈空间,栈空间分为:用户栈、内核栈。

 

栈(stack):

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

 2、存取方式:后进先出。

 3、使用:栈空间使用完时,系统会抛出栈异出的异常。

 4、申请效率:分配较快,自动分配回收。
堆(heap):

 1、通过malloc()动态申请,需要通过编程申请与释放。如果编程未释放,在进程结束时,可能由OS自动回收(取决于不同OS的实现)。

 2、存取方式:申请与释放顺序没有约定,比较随机。

 3、使用:堆空间用完时,内存申请会返回失败。

 4、申请效率:从系统全局空闲内存中分配,速度比较慢,并且容易产生内存碎片。

存取效率:

以下述代码为例分析:

void main()
{
  char a = 1;
  char b[] = "1234567890";
  char *c ="1234567890";
  a = b[1];
  a = c[1];
  return;
}

效率分析:

a=b[1],直接把字符串中的元素读到寄存器中。

a=c[1],要先读取指针的值,在读取指针指向内存的值,显然比较慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值