VS中更改栈和堆空间的⼤⼩
内存的读取速度显然较硬盘要快的多,当做程序时遇到⼤规模数据的频繁存取的时候,开辟内存控件就更显得重要了!⼀般来说,我们所⽤的内存有栈和堆之分,其它的我们很少控制,栈的速度快,但是控件⼩,不灵活;⽽堆的控件⼏乎可以满座任何要求,灵活,但是相对的速度要慢了很多,并且在vc中堆时⼈为控制的,new了就要delete,否则很容易产⽣内存泄露等问题。
将程序栈空间定义得⼤⼀点,VC++默认的栈空间是1M,有两个⽅法更改
a. link时⽤/STACK指定它的⼤⼩,或者在.def中使⽤STACKSIZE指定它的⼤⼩
b. 使⽤控制台命令“EDITBIN”更改exe的栈空间⼤⼩。
例如:打开⼯程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后在Reserve中设定堆栈的最⼤值和commit。注意:reserve最⼩值为4Byte;commit是保留在虚拟内存的页⽂件%
⽅法⼀:STACKSIZE 定义.def⽂件
语法:STACKSIZE reserve[,commit]
reserve:栈的⼤⼩;commit:可选项,与操作系统有关,在NT上只⼀次分配物理内存的⼤⼩
⽅法⼆:设定/STACK
打开⼯程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后
在Reserve中设定堆栈的最⼤值和commit。
注意:reserve默认值为1MB,最⼩值为4Byte;commit是保留在虚拟内存的页⽂件⾥⾯,它设置的较
⼤会使栈开辟较⼤的值,可能增加内存的开销和启动时间
/ STACK 选项设置堆栈的⼤⼩(以字节为单位)。此选项仅在⽣成 .exe ⽂件时使⽤。
reserve 值指定虚拟内存中的总的堆栈分配。对于 x86 和 x64 计算机,默认堆栈⼤⼩为 1 MB。在 Itanium 芯⽚组上,默认⼤⼩为 4 MB。commit 取决于操作系统所作的解释。在 Windows NT 和 Windows 2000 中,它指定⼀次分配的物理内存量。提交的虚拟内存导致空间被保留在页⾯⽂件中。更⾼的 commit 值在应⽤程序需要更多堆栈空间时可节省时间,但会增加内存需求并有可能延长启动时间。对于 x86 和
x64 计算机,默认提交值为 4 KB。在 Itanium 芯⽚组上,默认值为 16 KB。
以⼗进制或 C 语⾔表⽰法指定reserve值和 commit 值。
设置堆栈⼤⼩的另⼀种⽅法是使⽤模块定义 (.def) ⽂件中的语句。如果两者都指定,则STACKSIZE重写堆栈分配 (/STACK) 选项。可以使⽤⼯具在⽣成 .exe ⽂件之后更改堆栈⼤⼩。
在 Visual Studio 开发环境中设置此链接器选项
1. 打开此项⽬的“属性页”对话框。有关详细信息,请参见。
2. 单击“链接器”⽂件夹。
3. 单击“系统”属性页。
4. 修改下列任⼀属性:提交更改是内存条吗
堆栈提交⼤⼩
堆栈保留⼤⼩
Reference:
问题是在实际⽤的过程中,没有感觉VS的栈的⼤⼩只有1M啊。。。貌似明显不⽌1M吧?!不知道神马情况。。看来对内存理解不是很好啊,这个需要搞⼀下!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论