请教,栈比堆快很多?
char buf2[12345678]; --栈
char* buf2= new char[12345678]; -- 堆
栈很快,但是很小,只有1M?
那为什么我的程序char buf2[12345678]; 并fread 10M数据到buf2 通过了呢,执行结果正确
堆很大,但很慢,且频繁的new/delete容易造成内存碎片,进一步影响性能
那到底用什么?堆和栈都不能用了啊
堆很慢,到底比栈慢多少?
[解决办法]
世上没有完美。
栈的申请和释放只需要移动栈顶指针,当然是很快,但优点的另一面就是缺点,只用栈顶指针来管理内存的栈必须遵循先进后出原则,也就是如果你申请了一块内存,在你释放它之前,所有在它之前申请的内存全部不能释放!
堆的申请并不比栈要慢多少,在内存中找一块能用的划出来就行。但堆的释放比栈要慢得多,因为你释放了一块内存后,必须将这块内存和它旁边的内存重新联在一起,以加速下一次的申请。和栈不同的是,堆中申请的所有内存都彼此独立。
栈可以定义的很大,但定义的越大使用的越多,内存使用效率就越低。
所以1M一般来说够用了,如果程序需要更大的栈,那一般是程序设计有问题。
[解决办法]
多谢!
我的意思是我有比如10个文件,最小的100K,最大的200M
于是我new 200M内存,然后依次fread每个文件到200M的内存区域
那么全部文件处理完后delete这个内存区域
这样做是否合适?对于100k的文件来说,是否申请100K的内存效率更高?