为什么调用c语言程序前要设置堆栈?堆栈有什么用?没设置又会怎么样?堆栈是什么?还请各位嵌入式大神讲

您所在的位置:网站首页 什么是堆栈溢出 为什么调用c语言程序前要设置堆栈?堆栈有什么用?没设置又会怎么样?堆栈是什么?还请各位嵌入式大神讲

为什么调用c语言程序前要设置堆栈?堆栈有什么用?没设置又会怎么样?堆栈是什么?还请各位嵌入式大神讲

2023-05-30 10:46| 来源: 网络整理| 查看: 265

堆是用来申请不连续内存的数据区域闷陆搭,比如链表,地址不连续,而是通过指针串在一起形成一个连续的结构,c语言中用malloc函数申请的内存都在堆上,申请过不用时记得要用free函数释放掉,不然内存泄露。

而栈的速度比堆的快,数组和局部变量蚂拿都是在栈上分配,效率比较高。

另外还有自由存储区、全局/静态存储区和常量存储区,此处不一一讲解了。

在启动文件里都要设置堆和栈的大小,这样合理的分配才不会造成资源悉誉的浪费。假如你代码中使用的链表占用空间比较大,这时你就需要把堆设置大一点。假如你使用的数组比较大,就得把堆设置大一点。最简单的方法可以测试一下栈大小,定义一个很大的数组int a[m]m足够大时就会栈溢出。

想更多的了解c语言具体内存分区的话去百度吧,就帮你到这里了

栈就是一个空携册樱间,声明时候产生。

虚拟栈 来和 C 互传值。 栈上的的每个元素都是一个辩丛 Lua 值 (nil,数字,字符串,等等)。

无论何时 Lu a 调用 C,被调用的函数都得到一个新的栈, 这个栈独立于 C 函数本身的栈,也独立于之前的 Lu a 栈。 它里面包含了 Lu a 传递给 C 函数的所有参数,姿信 而 C 函数则把要返回的结果放入这个栈以返回给调用者

方便起见, 所有针对栈的 API 查询 *** 作都不严格遵循栈的 *** 作规则。 而是可以用一个 索引 来指向栈上的任何元素: 正的索引指的是栈上的绝对位置(从1开始); 负的索引则指从栈顶开始的偏移量。 展开来说,如果堆栈有 n 个元素, 那么索引 1 表示第一个元素 (也就是最先被压栈的元素) 而索引 n 则指最后一个元素; 索引 -1 也是指最后一个元素 (即栈顶的元素), 索引 -n 是指第一个元素。

当你使用 Lu a API 时, 就有责任保证做恰当的调用。 特别需要注意的是, 你有责任控制不要堆栈溢出。 你可以使用 lua_checkstack 这个函数来扩大可用堆栈的尺寸。

无论何时 Lu a 调用 C , 它都只保证至少有 LUA_MINSTACK 这么多的堆栈空间可以使用。 LUA_MINSTACK 一般被定义为 20 , 因此,只要你不是不断的把数据压栈, 通常你不用关心堆栈大小。

当你调用一个 Lua 函数却没有指定要接收多少个返回值时 (参见 lua_call), Lua 可以保证栈一定有足够的空间来接收所有的返回值, 但不保证此外留有额外的空间。 因此,在做了一次这样的调用后,如果你需要继续压栈, 则需要使用 lua_checkstack。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://outofmemory.cn/yw/12345476.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3