淘客熙熙

主题:【原创】猛批烂书 程序员面试宝典 上 -- 晨池

共:💬64 🌺96 新:
全看分页树展 · 主题 跟帖
家园 呵呵。

大致是如此,1是栈上分配内存,2是在堆上分配内存。

正常情况应该是像1那么写,在栈上分配内存开销很小,执行速度很快,汇编几个指令的事情,当然函数执行结束,出栈以后,这片内存就没用了。而在堆上分配内存,就涉及到操作系统的系统调用了,像windows操作系统上的C/C++实现,动态分配内存的malloc和new一般最后会调用windows的api,用HeapAlloc在系统堆上分配内存,同样free和delete最后会调用HeapFree这个Api,把动态分配的内存释放掉。

不过这个例子,因为STL类vector会根据塞进去东西的多少自动调整大小,分配和释放内存,在stl的实现里一般这些都是通过new,delete

来实现,也牵涉到系统堆上内存的分配和释放,所以也很难说哪个好,当然像例子里这么简单的情况,就塞一个数进去,肯定是在栈上做比较好了。

还有1个问题,栈的大小有限制,像早期的Windows好像就给2页还是4页,8MB还是16MB来着,记不清了,而在堆上分配内存,基本只受系统可用内存的限制,所以你即使在一个函数里,要处理很大的内存,好像也只能在堆上做。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河