C ++做堆栈内存分配/释放defragement内存。 当我声明本地内存变量时,它们被分配和解除分配,是否会使内存被激活?
从记忆的角度来看,这可能非常重要堆栈有多少可用内存? 我可以分配
char sam[999999999999999];
答案 0 :(得分:3)
不,内存没有碎片化。你可以在堆栈上分配多少内存是实现定义的,通常大约1兆字节。
答案 1 :(得分:2)
在堆栈上分配内置函数不应导致碎片。但是,如果在堆栈上分配类似string
的内容,而堆栈本身不会碎片化,则字符串会在堆上分配内存,可以最终碎片化。
通常堆栈与堆相比非常小 - 类似于1-64MB,具体取决于您的平台。
答案 2 :(得分:1)
堆栈有多少可用内存?
取决于。
这取决于编译器,它取决于您启动二进制文件的参数(因为编译器可能决定将堆栈大小的定义推迟到运行时)。它还取决于操作系统和可用资源。
有一点兴趣,gcc正致力于SplitStacks。许多语言已经提供了这个(例如),其想法是堆栈可以按需增长。此时,限制变为:操作系统可以一次分配多少?
我还没有尝试过......甚至不知道这是否完全实现了。
答案 3 :(得分:0)
通过对堆栈内存进行分配和解除分配将不会受到影响,因为在编译时本身已知堆栈变量需要多少内存。关于可以在堆栈上分配的最大内存量取决于编译器。默认情况下,对于VS编译器,它的1 MB并且可以通过编译器选项进行控制。