0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Window程序的栈默认大小是多少?

鱼鹰谈单片机 来源:嵌入式Linux 2023-10-07 09:19 次阅读

无论在Window还是Linux上,我们写代码的时候,不管是应用程序还是内核,都有必要了解内存的大小。当然,也需要了解栈大小。

前两天,微信群里就讨论了这样的问题,大家对于栈和堆的理解,可以在评论去说下自己的看法。

在 Window 下:

有些资料会说明Window程序的栈默认大小是2M,但我们讨论了很久,并不知道2M大小是如何得来的。

首先我写了一个测试程序来测试栈大小,结果如下:

wKgaomUgsmyANhAUAAAkJE2zuTw637.jpg

使用DEVC++执行如下:

wKgZomUgsjuAdJTjAAIjDai0DzA295.jpg

看起来是接近2M,然后我们查了下资料,有一个比较官方的资料说明了栈的大小应该是1M。

wKgaomUgsjuAJ68zAAKUpKMEIwE191.jpg

那我们测试出来的结果还是没有找到原因,但是我们可以尝试设置下程序的栈大小。

wKgZomUgsjuANq1nAAPupEIy9EI087.jpg

通过这样设置后,可以看到测试出来的栈大小与设置的相符合的。

wKgZomUgsjuANYMGAAHFobieI_s279.jpg

在 Linux 下:

Linux中测试栈的大小比较容易:

wKgaomUgspSASNqtAABqD4ZutBs414.jpg

当然,我们可以用命令来获取堆栈大小或者设置堆栈大小。

wKgZomUgsjuAbkBOAANUp85kcws720.jpg

也可以查进程信息

wKgZomUgsjuABEsgAAaRZO8eRVs221.jpg

实验下设置堆栈的大小:

wKgaomUgsjuAVwwZAAKS0iA6sko434.jpg

这里面有一个小技巧:

Once ulimit is set it can only be lowered never raised. ulimit

设置后,只能降低而不能提高。

wKgaomUgsjuAVUFDAABY12qhP6Q801.jpg





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Window
    +关注

    关注

    0

    文章

    78

    浏览量

    37142
  • Linux系统
    +关注

    关注

    4

    文章

    567

    浏览量

    26923

原文标题:栈默认到底有多大~~

文章出处:【微信号:emOsprey,微信公众号:鱼鹰谈单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ucos_ii 每个任务具体定义大小

    在ucos_ii 系统中,针对每个任务怎么来分配其大小。我在程序中对一个只是LED点亮的任务,如果真是LED,大小为10就可以正常运行,如果增加一个消息队列,再用10就不能运行,我
    发表于 04-30 17:43

    zigbee协议程序的协调器以及终端的HEX文件大小均超过了256kb

    我的ZIGBEE协议程序的协调器以及终端的HEX文件大小均超过了256kb,但是FLASH最大也才256kb,程序烧写应该会出现问题的。我之前没有发现这个问题,
    发表于 07-12 11:29

    如何查看CC2530的z-stack协议程序大小

    通常查看单片机程序大小是通过查看烧写进单片机的HEX文件的大小而确定的,然而CC2530的z-stack协议程序的HEX文件并不能代表其
    发表于 09-26 11:09

    如何修改DSP大小

    代码中涉及很大的变量,有的变量有好几K,我不想都用全局变量和静态变量,请问如何修改大小
    发表于 05-28 08:12

    请问Z-Stack 协议SampleAPP默认时钟是多少MHZ?

    本帖最后由 一只耳朵怪 于 2018-6-1 15:22 编辑 Z-Stack 协议SampleAPP默认时钟是多少MHZ?
    发表于 06-01 07:14

    请问stm32区和堆区的如何设置大小

    我在stm32f103c8 20k ram上跑着RT-Thread系统最近一直有个问题跑个半小时片子就死掉了。代码中找不到问题现在怀疑是ram不够用。下边截图是程序便宜完之后打各项内容的大小和代码
    发表于 12-17 08:48

    stm32开发板的ram的大小是多少

    stm32开发板的ram 的大小是多少
    发表于 06-16 04:20

    ThreadX任务大小的确定方法以及溢出检测方法

    第10章 ThreadX任务大小确定及其溢出检测本章节为大家讲解ThreadX任务大小的确定方法以及溢出检测方法。给任务分配多大的
    发表于 08-04 08:59

    讲解ThreadX任务大小的确定方法以及溢出检测方法

    第10章 ThreadX任务大小确定及其溢出检测本章节为大家讲解ThreadX任务大小的确定方法以及溢出检测方法。给任务分配多大的
    发表于 08-09 06:30

    如何确定ThreadX任务大小

    如何确定ThreadX任务大小呢?什么是溢出呢?怎样去检测ThreadX的溢出呢?
    发表于 10-14 07:42

    堆和的区别是什么

    在回答完进程的虚拟地址空间布局之后(上一篇),面试官可能抓住堆和深入展开。堆和的区别①管理方式:由编译器自动管理;堆由程序员控制,使用方便,但易产生内存泄露。②生长方向:
    发表于 12-22 07:26

    空间的大小如何分配

    分散加载文件中都有定义堆栈空间大小,堆空间一般由程序员使用malloc函数动态分配的,因此堆空间大小一般都会根据实际情况自行确定。是一块用于存储
    发表于 01-27 07:20

    怎样去修改空间的大小

    程序中的局部变量太多时,可能会造成空间不够用导致程序出错,这个时候就需要修改空间的大小默认
    发表于 02-16 07:10

    关于Linux跨网络运行X Window程序

    关于Linux跨网络运行X Window程序   X Window在设计上就是跨网络的,X Client是需要图形显示的应用程序, X Server则负责具体显示和传递用户
    发表于 04-01 16:49 605次阅读

    修改栈空间的大小

    程序中的局部变量太多时,可能会造成栈空间不够用导致程序出错,这个时候就需要修改栈空间的大小默认的栈空间大小是 0x400 ,也就是 102
    发表于 12-20 18:53 1次下载
    修改栈空间的<b class='flag-5'>大小</b>