导航:首页 > 源码编译 > 编译器可以修改栈大小吗

编译器可以修改栈大小吗

发布时间:2022-05-31 18:28:41

‘壹’ 程序设计中,堆和栈比较重要。栈存取速度大于堆,而且编译器可以修改栈大小,这个值可以随意设置吗

学习电脑编程多年了,在程序设计方面也算有一番见解,希望这些经验能对题主有所帮助。

‘贰’ C++小问题,帮帮我

数组太大了。。。
你要改进算法啊。比如写入文件,从文件里读。或用动态分配内存。
定义的数组内存是连续分配在栈空间的,由于编译器的原因,可能栈空间预定义的没这么大,有些编译器可以修改栈空间大小,但是不建议这么做。栈比堆小,用动态分配内存的话,从堆中创建空间的话就好很多了。如果你的数组再大,甚至超过了堆的大小,那就只能从文件读取。

‘叁’ devc如何扩大栈容量

你的程序如果真需要那么大的静态数组(栈分配),那恐怕你的程序应该重新设计一下。 比如用动态的(heap,堆)。 - 程序的“栈”stack不是语言本身控制的,而是操作系统决定的,虽然编译器可以有些设置,但调节的范围也有限。Windows下缺省的stack大小是1M。像VC编译器,可以设置修改,也就到32M。 有工具软件,可以修改已编译后的exe文件的stack限制(比如editbin),也无外乎修改PE的数据格式,以通知操作系统加载程序时的stack分配而已。

VC也好,Dev-C也好,只是一个IDE,编译环境,编译器选项可修改的范围有限,最后还是受限于操作系统。

如果是纯C,建议用malloc这种heap分配方式,得到大数组;而如果是C++的话,可以用STL的容器,比如vector<>或stack<>来模拟你需要的“栈”。 -- 这是可移植的方法;如果是系统相关的,那么Windows下的SDK API比如VirtualAlloc等内存管理函数,可以直接用于程序的内存分配,但那也是heap上,而非stack。

‘肆’ 编译器可以修改栈大小,这个值可以随意设置吗

你说的那个默认1M的栈,应该指的是call stack(函数调用使用的栈)。这个栈用来存放函数调用时所传递的参数(并非所有参数都通过栈传递),栈指针,return address,寄存器的备份,还有每层函数的local variable。
1M大多数情况都是够用的,如果用完可能会发生非法访问等错误。可能会用完1M的情况:某个被调用的函数申请了一个很大的local variable,比如直接在栈上开个大数组之类的;还有就是递归调用,递归层数多了后很容易就用完1M。所以递归一般不要乱用。

‘伍’ c语言爆栈如何修改

这个栈大小是编译器里的参数,你必须到你的编译环境里找到设置的地方,把上限值调大。
如果你找不到这个设置菜单的话,代码改用堆空间,而不用栈空间,也能实现你的功能的。一般编程的时候,这么大片的连续空间的使用都会选择用堆,而不用栈,因为栈的空间很有限。
使用堆的方法就是调用malloc函数申请空间。

‘陆’ 函数调用栈不够应该怎么办

调整一个C程序栈的默认大小可以使用编译选项、连接选项或使用#pragma指令,具体用法视编译器不同,VC下可以使用 /Fnewsize 编译选项设置默认栈大小,其中newsize是以字节为单位,也可以使用/STACK:reserve[,commit]连接选项,使用#pragma指令的样式如下:
#pragma comment(linker, "/STACK:reserve,commit")
reserve和commit均以字节为单位,具体查看编译器帮助文档。
如果手工模拟函数的递归调用,则有范式可供转换,一般的数据结构书上都有介绍,具体操作难度要视递归调用的复杂度而定,一般样式如下:
//将初始值压栈
while(栈非空){
//取出栈顶元素
//处理该问题
//依据处理条件将子问题分别压栈
}
也可以使用一个线程来调用,为线程指定栈大小。
如果是递归调用导致栈溢出,建议LZ考虑更好的算法,增加栈的大小不是根本办法。

‘柒’ c++堆栈的各自大小,堆和栈的各自定义

这里的堆和栈不仅仅是按照数据结构里的堆和栈来理解,更倾向于表示两种不同作用的内存区域。
栈是有编译器来管理的,具体的大小可能根据编译器不同而异,编译器也可以手动设置栈的大小,通常有1M和2M的,比如在你定义变量时,由编译器将变量压栈,作用域结束,编译器控制变量出栈,程序员不能很直接的操作栈。
堆内存是向系统申请的内存,由程序员管理的,你new或者malloc时系统正常情况下回给你一块堆内存空间,你爱什么时候存数据都行,想存什么就存什么,想什么时候释放(delete,free)都可以。堆的大小没有什么具体数值,看机器的运行状况,配置状况而定。

‘捌’ C++中怎样手动扩大系统分配的栈空间

如果是系统栈的话
VC++默认的栈空间是1M,有两个方法更改
a. link时用/STACK指定它的大小,或者在.def中使用STACKSIZE指定它的大小
b. 使用控制台命令“EDITBIN”更改exe的栈空间大小。
例如:打开工程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后在Reserve中设定堆栈的最大值和commit。
注意:reserve最小值为4Byte;commit是保留在虚拟内存的页文件%

‘玖’ 一个函数产生堆栈的大小和什么有关

和操作系统有关系
不同的操作系统对于栈的默认大小是有规定的。对于Linux系统,默认的栈空间是10M。对于Windows系统,默认的空间是1M。但是栈的空间是可以调整的,在编译器的编译属性更改

‘拾’ qtcreator修改编译堆栈大小

qtcreator修改编译堆栈大小步骤如下:
1.打开pro文件
2.在最后添加QMAKE_ LFLAGS +=”/STACK:65536, 4096" //设置栈保留大小65536K提交大小4096K。

阅读全文

与编译器可以修改栈大小吗相关的资料

热点内容
毕业设计单片机仿真 浏览:835
阿里ai云服务器 浏览:433
小程序云服务器可以绑个人账户吗 浏览:727
王者荣耀体验服ios怎么登陆安卓的 浏览:285
客户想要的与程序员理解的 浏览:669
硅谷一普通程序员的一天 浏览:456
算法实现两个集合合并 浏览:74
班长命令什么意思 浏览:139
51单片机c语音 浏览:733
悦翔v3压缩比 浏览:714
oppo怎样修改手机里的文件夹名称 浏览:218
PHP图片上传替换 浏览:139
androidtv桌面 浏览:810
miui10版本怎么隐藏app 浏览:52
阿里云服务器怎么输入命令 浏览:426
如何通过服务器连接网络 浏览:664
一张大事年表pdf 浏览:396
鸡兔同笼java编程 浏览:611
应届生php程序员简历 浏览:652
格力三匹压缩机电流测哪根线 浏览:77