[转帖] Windows 与linux的栈大小问题
一般来说,我们所用的内存有栈和堆之分,其它的我们很少控制,栈的速度快,但是空间小、不灵活;而堆的空间几乎可以满足任何要求、灵活,但是相对的速度要慢了很多,并且在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.0 * +; // IM以内,不然提示 stack overflow char buf[N]; memset(buf, 'A', N); buf[N - ] = 'X'; buf[N - ] = '\0'; printf("%s", buf); printf("\n"); ;
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
[转帖] Windows 与linux的栈大小问题的更多相关文章
- [转帖]Windows和Linux对决(多进程多线程)
Windows和Linux对决(多进程多线程) https://blog.csdn.net/world_2015/article/details/44920467 太长了 还没看完.. 还是没太理解好 ...
- [转帖]Windows与Linux的命令行命令对比
Windows与Linux的命令行命令对比 https://www.cnblogs.com/sztom/p/10785140.html * Windows不区分大小写,Linux区分大小写的. sn ...
- hadoop java VM 参数设置 默认native栈大小设置
问题总结: 程序栈太小,64位机器的栈大小默认比32位的大,将程序从64放到32中执行则报错,需要修改初始堆栈大小 (.so库中提供两个函数接口,一个里面使用的是尺寸较大的图像,另一个处理的图像很小, ...
- [转帖] Linux 下面栈空间大小的实验
比如局部变量是保存在栈空间中的,今天突然在想栈的上限是多大呢,什么时候才会栈溢出? ulimit 命令 linux下使用ulimit 命令可以查看系统的很多上限值. ulimit -a 查看所有 ul ...
- 更改Linux默认栈空间的大小
有时候在Linux写C++程序处理大量的数据,程序内部需要分配很大的数组来存放一些数据,但有时候分配的数组太大的话运行时会出现段错误.这种情况可能是分配的数组大小超过了Linux系统的默认栈空间的大小 ...
- Linux 默认线程栈大小 调优
Linux 线程栈介绍 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等:和堆相比,栈通常很小. Linux 查询线程栈 1.查看默认的 ...
- linux多线程默认栈大小和最大线程数
linux的线程栈大小可以使用ulimit -s查看,对于ubunt 2.6的内核线程栈的默认大小为8M,如下: shine@shine-bupt:~/Program/C$ ulimit -s 819 ...
- 【转帖】Linux上搭建Samba,实现windows与Linux文件数据同步
Linux上搭建Samba,实现windows与Linux文件数据同步 2018年06月09日 :: m_nanle_xiaobudiu 阅读数 15812更多 分类专栏: Linux Samba 版 ...
- 【转帖】Windows与Linux系统下的库介绍
Windows与Linux系统下的库介绍 http://embeddedlinux.org.cn/emb-linux/entry-level/200903/12-553.html 库的定义 库文件是一 ...
随机推荐
- 使用docker-compose运行Django
1.新建空目录 2.进入该目录新建Dockerfile文件,并在该Dockerfile文件添加如下内容 FROM python:3 ENV PYTHONUNBUFFERED 1 RUN mkdir / ...
- OpenCV——基本图形绘制(椭圆、圆、多边形、直线、矩形)
//绘制椭圆 void DrawEllipse(Mat img, double angle) { ; ; ellipse(img, Point(WINDOW_WIDTH / , WINDOW_WIDT ...
- javascript实现拖曳与拖放图片
javascript实现拖曳与拖放图片 其实对于drag和drop拖曳与拖放事件IE很早以前就支持这个操作了,我们先来看看HTML5中新增的拖放API. 在HTML5中想要实现拖放操作,至少要做以下操 ...
- Python2.7-hashlib
hashlib模块,实现了支持多种不同哈希算法的接口,不同 hash 算法的构造函数就是算法名,返回的哈希对象都具有相同接口.哈希算法不是加密算法,所以下面提到的加密不是真的加密,因为真的加密需要能够 ...
- pip install Yellowfin失败的问题
上面的方法简单有效 https://blog.csdn.net/quqiaoluo5620/article/details/80608474
- Tomcat主页404错误
单独启动Tomcat正常,但是通过Eclipse启动(这时启动也是正常的)后,访问Tomcat主页报404错误. 在网上找到了解决办法:http://www.jb51.net/article/8283 ...
- day61
Vue 八.重要指令 v-bind <!-- 值a --> <div v-bind:class='"a"'></div> <!-- 变量a ...
- 【服务器】Https服务配置
1)利用openssl生成证书 2)再次修改nginx配置文件nginx.conf中的server配置 ① 是默认监听http请求的8080端口的 server (再次修改,第一次是在 用ngi ...
- kettle学习笔记(四)——kettle输入步骤
一.输入步骤概述 输入步骤主要分为以下几类: • 生成记录/自定义常量 • 获取系统信息 • 表输入 • 文本文件输入 • XML 文件输入 • Json输入 • 其他输入步骤 二.生成记录和自定义常 ...
- vb用createprocess启动其他应用程序
Option Explicit Private Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessId As Lon ...