C ++做堆栈内存分配/释放defragement内存

时间:2011-03-29 12:42:30

标签: c++ memory stack

C ++做堆栈内存分配/释放defragement内存。 当我声明本地内存变量时,它们被分配和解除分配,是否会使内存被激活?

从记忆的角度来看,这可能非常重要

堆栈有多少可用内存? 我可以分配

 char sam[999999999999999];

4 个答案:

答案 0 :(得分:3)

不,内存没有碎片化。你可以在堆栈上分配多少内存是实现定义的,通常大约1兆字节。

答案 1 :(得分:2)

在堆栈上分配内置函数不应导致碎片。但是,如果在堆栈上分配类似string的内容,而堆栈本身不会碎片化,则字符串会在堆上分配内存,可以最终碎片化。

通常堆栈与堆相比非常小 - 类似于1-64MB,具体取决于您的平台。

答案 2 :(得分:1)

  

堆栈有多少可用内存?

取决于。


这取决于编译器,它取决于您启动二进制文件的参数(因为编译器可能决定将堆栈大小的定义推迟到运行时)。它还取决于操作系统和可用资源。

有一点兴趣,gcc正致力于SplitStacks。许多语言已经提供了这个(例如),其想法是堆栈可以按需增长。此时,限制变为:操作系统可以一次分配多少?

我还没有尝试过......甚至不知道这是否完全实现了。

答案 3 :(得分:0)

通过对堆栈内存进行分配和解除分配将不会受到影响,因为在编译时本身已知堆栈变量需要多少内存。关于可以在堆栈上分配的最大内存量取决于编译器。默认情况下,对于VS编译器,它的1 MB并且可以通过编译器选项进行控制。