主题:【原创】猛批烂书 程序员面试宝典 上 -- 晨池
大致是如此,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来着,记不清了,而在堆上分配内存,基本只受系统可用内存的限制,所以你即使在一个函数里,要处理很大的内存,好像也只能在堆上做。
- 相关回复 上下关系8
压缩 3 层
🙂当时我们也就是利用了它构造完以后就释放的特性 晨池 字382 2010-11-09 05:21:27
🙂大致知道了 1 靠山王 字740 2010-11-10 10:26:57
🙂嗯……我也觉得,嘿嘿,不过细节我忘记了 1 晨池 字98 2010-11-11 03:55:59
🙂呵呵。
🙂不是这样的 类反词典 字678 2010-11-08 16:31:04
🙂smart pointer还是很有用的 假设 字140 2010-11-24 02:34:39
🙂错误是没有的,没有所谓a1必须要放到栈上的说法。 股市就是搏傻游 字430 2010-11-08 19:31:31
🙂用哪一个应该是看需求 四道口 字94 2010-11-08 12:30:42