一般来说,我们所用的内存有栈和堆之分,其它的我们很少控制,栈的速度快,但是空间小、不灵活;而堆的空间几乎可以满足任何要求、灵活,但是相对的速度要慢了很多,并且在VC中堆是人为控制的,new了就要delete,否则很容易产生内存泄露等问题。

系统     栈的字节数        bits         digits           以兆为单位的值

Linux     8192K  bytes       <=62407         <=18786             linux默认8M(我的好像是10M)

Windows     1024K   bytes       <=10581         <=3185              windows默认1M

普通的Win32线程有两个栈:一个是用户栈,另一个是内核栈;而如果是内核中创建的系统工作线程,则只有内核栈。只要代码在内核中运行,线程就一定是使用其内核栈的。栈的主要作用是维护函数调用帧,以及为局部变量提供空间。

用户栈可以指定其大小,默认是1MB,通过编译指令/stack可改设其他值。

普通内核栈的大小是固定的,由系统根据CPU架构而定,x86系统上为12KB,x64系统上为24KB,安腾系统上为32KB。对于GUI线程,普通内核栈空间可能不够,所以系统又定义了“大内核栈”概念,可以在需要的时候增长栈空间。只有GUI线程才能使用大内核栈,这也是系统规定的。

#include<stdio.h>
#include<string.h> int main()
{//测试环境:  windows 7 企业版     64位    VC++6.0const int  N=1024*1009 +792;  // IM以内,不然提示 stack overflowchar   buf[N];memset(buf, 'A', N);buf[N - 2] = 'X';buf[N - 1] = '\0';printf("%s", buf);printf("\n");return 0;

1.Windows下程序栈空间的大小,VC++ 6.0 默认的栈空间是1M。

VC6.0中修改堆栈大小的方法:

1). 选择 "Project->Setting".
 2). 选择 "Link".
 3. 选择 "Category"中的 "Output".
 4. 在 "Stack allocations"中的"Reserve:"中输栈的大小

在VS中设置堆栈大小的方法为:

1). 选择 "项目->属性".
2). 选择 "链接器".
3. 选择 "系统".
4. 在 "堆栈保留大小"中输栈的大小

2 .Linux下程序栈空间的大小

linux下非编译器决定栈大小,而是由操作系统环境决定;而在Windows平台下栈的大小是被记录在可执行文件中的(由编译器来设置),即:windows下可以由编译器决定栈大小,而在Linux下是由系统环境变量来控制栈的大小的。

在Linux下通过如下命令可查看和设置栈的大小:

命令: ulimit -a            # 显示当前栈的大小 (ulimit为系统命令,非编译器命令)

命令: ulimit -s 32768      # 设置当前栈的大小为32M bytes

转载于:https://www.cnblogs.com/jinanxiaolaohu/p/9294107.html

[转帖] Windows 与linux的栈大小问题相关推荐

  1. linux进程分部内存,栈大小和内存分部问题

    栈大小是有默认值的,如果申请的临时变量太大的话就会超过栈大小,造成栈溢出. 编译期限制栈大小,和系统限制栈深度根本是两回事.系统限制栈深是限制进程主线程的栈深,限制的是整个函数调用链的最大栈深,这个栈 ...

  2. win10 linux分区大小调整大小,如何在windows系统中调整分区大小(包括windows10/8/7)...

    对磁盘进行分区(尤其是Windows 10,8和7)至关重要.毕竟,通过磁盘的分区,任务和其他程序的处理可以采用更有效的路线.分区可以更轻松地整理任务并专注于重要的事情. 分区磁盘时,第一次尝试时总是 ...

  3. 【Linux系统编程】线程栈大小

    00. 目录 文章目录 00. 目录 01. 概述 02. 设置线程栈函数 03. 附录 01. 概述 先来讲说线程内存相关的东西,主要有下面几条: 进程中的所有的线程共享相同的地址空间. 任何声明为 ...

  4. 栈大小和内存分部问题

    今天面试问了一个栈大小问题,问过两次内存的结构问题,都没有答好,这次要弄清楚才行. 栈大小是有默认值的,如果申请的临时变量太大的话就会超过栈大小,造成栈溢出. 编译期限制栈大小,和系统限制栈深度根本是 ...

  5. 解决报错Process finished with exit code -1073741571 (0xC00000FD),修改栈大小

    运行程序时程序意外终止,并返回提示: Process finished with exit code -1073741571 (0xC00000FD) 导致的原因是StackOverflow(栈区溢出 ...

  6. 内存详解-理解 JVM 如何使用 Windows 和 Linux 上的本机内存

    内存详解 理解 JVM 如何使用 Windows 和 Linux 上的本机内存 Java™ 堆耗尽并不是造成 java.lang.OutOfMemoryError 的惟一原因.如果本机内存 耗尽,则会 ...

  7. linux安装分区大小分配

    ●文件系统 在windows下,我们常见到的文件系统有 FAT. FAT32. NTFS 在linux里可使用的文件系统有: Ext2:早期的格式,不支援日志 Ext3:是ext2改良版,增加了日志功 ...

  8. 适用于Windows和Linux的Yolo-v3和Yolo-v2(下)

    适用于Windows和Linux的Yolo-v3和Yolo-v2(下) 如何训练(检测自定义对象): (培养老YOLO V2 yolov2-voc.cfg,yolov2-tiny-voc.cfg,yo ...

  9. windows和linux添加引导文件,Linux与Windows 10用grub引导教程-Go语言中文社区

    前言 去年暑假的时候,写了一篇如何装 Linux 和 Windows 10 双系统的文章发在了简书上,我写这篇文章的原因是当初装双系统确实是折腾了许久,网上也找不到一篇详尽的教程.由于去年对于写教程还 ...

最新文章

  1. 云计算DHT分布式存储
  2. Java String.substring内存泄露?
  3. Early Z Culling
  4. 洛谷 P2574 XOR的艺术
  5. mysql5.6.28安装教程百度经验_Linux(Ubuntu)下Mysql5.6.28安装配置方法图文教程
  6. 2.5 Hive中外部表的讲解
  7. c++学习笔记(5)
  8. python矩阵乘法算法_纯python进行矩阵的相乘运算的方法示例
  9. bug—jupyter notebook 连接不上kernel内核问题
  10. src2pkg:slackware下超强打包程式 [转]
  11. 于仕琪libfacedetection WIN10 VS2015
  12. Atom markdown-pdf 插件错误 Markdown-pdf: Error. Check console for more information.
  13. linux版本i686,在Ubuntu中'i686'是什么意思? - Ubuntu问答
  14. hp 交换机远程连接_HP交换机简单配置方法
  15. 电脑蓝屏提示unexpected store exception的解决方法
  16. JavaList集合根据ParentId递归【无限套娃】
  17. 联想如何打开计算机配置,联想电脑如何进入BIOS以及设置启动菜单
  18. 只需一个损失函数,一个超参数即可压缩BERT,MSRA提模型压缩新方法
  19. aws linux使用ssh登陆_在Mac上通过ssh连接到amazon aws linux服务器
  20. 工作室SWS自动化脚本

热门文章

  1. C#设计模式之十六观察者模式(Observer Pattern)【行为型】
  2. 【小错误】ORA-00265: instance recovery required, cannot set ARCHIVELOG mode
  3. Codeforces Round #382 (Div. 2) D. Taxes 歌德巴赫猜想
  4. hiho_100_八数码
  5. su root 后还是不能使用useradd ,useradd 等命令
  6. 【零基础学Java】—对象的向上和向下转型(二十七)
  7. 手把手带你一起写迅雷官网
  8. 程序开发语言c#中的 应该发成什么音,0006. 如何在C# winform 上开发 文字转语音
  9. vue暂存功能_vue路由缓存的几种实现方式小结
  10. 浙江哪个地方的杨梅最出名?