首页 > 学技术 > 技术网文 > C/C++ > 正文

[保留] 为什么说在堆上分配内存比在栈上分配内存慢?


来源 chinaunix.net kuqin整理

如题。



 longshort 回复于:2006-12-26 10:11:05

有测试数据支持么?


 pinecrane 回复于:2006-12-26 10:13:28

底层的物理机制不同.


 jack9981 回复于:2006-12-26 10:26:59

引用:原帖由 pinecrane 于 2006-12-26 10:13 发表
底层的物理机制不同. 



??

能解释一下吗?


 net_robber 回复于:2006-12-26 10:36:40

will LZ tell us, where did you see this??


 Benson_linux 回复于:2006-12-26 10:43:16

估计是在堆上分配空间的时候需要做一些移动。


 gvim 回复于:2006-12-26 11:41:54

堆空间的开辟需要用系统函数,栈上直接修改指针
堆空间的管理需要系统记帐,栈上的空间可以由编译器管理或是保存在某个处理器寄存器中。
堆空间的释放需要系统管理,栈上的释放可以直接丢弃
......


 wolf0403 回复于:2006-12-26 12:18:50

堆空间需要通过栈上的指针间接引用,所以访问会慢。

至于分配,大约 gvim 都讲到了。


 Benson_linux 回复于:2006-12-26 12:30:52

学习了。


 xb_parasite 回复于:2006-12-26 18:26:44

学习了。谢谢。


 crspo 回复于:2006-12-26 23:28:53

lz实在问alloca()和malloc()的速度差别吗?


 pineapple1175 回复于:2006-12-26 23:47:50

记得在apue2上面看到关于线程中有这样一段话,大致意思是,一个线程有自己的堆栈,可以在堆栈上分配内存,比如说一个结构体,如果这个线程调用了pthread_exit()返回这个结构体指针的时候之后要特别的小心,因为很有可能这个结构体里面的成员值发生改变,这个可以理解,因为同一个进程所有线程的资源是共享的,当这个线程退出之后那部分以前用过的堆栈很可能被其它线程占用,但同时又说如果malloc就不会出现这样的问题,我有一点不太不明白的是:malloc申请的资源和线程在堆栈中申请的资源为什么会不一样?


 boxpei 回复于:2006-12-27 08:31:10

好好看书,堆和栈的区别。


 Benson_linux 回复于:2006-12-27 09:52:43

引用:原帖由 pineapple1175 于 2006-12-26 23:47 发表
记得在apue2上面看到关于线程中有这样一段话,大致意思是,一个线程有自己的堆栈,可以在堆栈上分配内存,比如说一个结构体,如果这个线程调用了pthread_exit()返回这个结构体指针的时候之后要特别的小心,因为很有可能 ... 




同问,希望高手解释一下。


 jronald 回复于:2006-12-27 10:00:50

比如,在栈上分一个int,只要esp-4就可以了,
在堆上系统要记录被分配内存的信息,以便释放
BTW:
栈有序
堆无序


 ilovejuner 回复于:2007-06-21 08:20:20

怎么没有再继续下去了?


 flw2 回复于:2007-06-21 08:57:11

还用继续吗?
gvim的帖子




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=876186
转载请注明作者名及原文出处



收藏本页到: