当前位置:  技术问答>linux和unix

Linux/Unix下程序的堆栈大小是怎么定的?

    来源: 互联网  发布时间:2016-05-18

    本文导语:  windows下在VC中进行程序开发时可以在工程设置中更改堆栈的大小,那么在Linux/Unix下的程序开发是怎么决定一个程序所用堆栈的大小呢? 我们的一个软件因为用了迭代,所以对堆栈的要求比较高,在Windows下我们改了dsp...

windows下在VC中进行程序开发时可以在工程设置中更改堆栈的大小,那么在Linux/Unix下的程序开发是怎么决定一个程序所用堆栈的大小呢?
我们的一个软件因为用了迭代,所以对堆栈的要求比较高,在Windows下我们改了dsp文件的设置,没有问题,但是在HP的工作站上(UNIX)就有问题,一做涉及到迭代的功能程序就会崩溃,提示栈空间不够。我用ulimit -a 查看了一下,返回:
time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         2015464
stack(kbytes)        81612
memory(kbytes)       unlimited
coredump(blocks)     4194303
nofiles(descriptors) 200
我用ulimit -s想把stack size改一下,可是只要稍微改大一点(比如81613)就/usr/bin/ulimit[7]: ulimit: exceeds allowable limit,我工作站的内存是1149M,为什么我的堆栈大小改不上去,是有其他的限制需要改大吗?
谢谢指点!

|
系统对资源的限制有两种:hard limit和soft limit. 其中ulimit -a看到的是软限制,软限制的值必须时小于等于硬限制的值,所以如果你用ulimit -s提高不上去,估计是已经到达硬限制的范围了,那么就应该先更改硬限制的值:
比如修改/etc/security/limits这个文件(不知道HP上是不是放在这个文件里)
还有看看ulimit 是否支持-H,支持的话用ulimit就可以改了。
或者用sam或smh进入对用户的这个属性进行修改。

|

The default value of stack size in "limit -h" in tcsh has changed to "unlimited" in kernel-2.6.18-92.el5, whereas previous kernel versions have some value. Is this a bug or a specification change?

http://kbase.redhat.com/faq/docs/DOC-2591

The default stack size, unless overwritten by pthread_attr_setstacksize(), depends on the resource limit (i.e. rlimit), and it is platform specific. The default on x86 is 10M.

 



$ ulimit -a | grep stack
stack size (kbytes, -s) 10240


 

If the rlimit is unlimited, use an architecture-specific default. For x86, this is 2M.

 



$ ulimit -a | grep stack
stack size (kbytes, -s) unlimited


 

To set the default 2M stack size that was in LinuxThreads, in NPTL instead, do either:

 



$ ulimit -s unlimited
$ ulimit -a | grep stack
stack size (kbytes, -s) unlimited


 

or

 



$ ulimit -s 2048
$ ulimit -a | grep stack
stack size (kbytes, -s) 2048


 

pthread_attr_setstacksize() can also be called to set the appropriate stack size.

 



#include 
#include 

int val = 0;
pthread_attr_t stacksize;

pthread_attr_init(&stacksize);

pthread_attr_getstacksize(&stacksize, &val);
printf("Default stack size: %d\n", val);

val = 2097152; /* echo $((2*1024*1024)) */
pthread_attr_setstacksize(&stacksize, val);
pthread_attr_getstacksize(&stacksize, &val);
printf("Changed stack size: %d\n", val);


 

Another way to change the rlimit permanently and not having to modify the existing multi-threaded application, is to modify the /etc/security/limits.conf file. Simply add a line that looks like:

 



...
#   
...
username hard stack 2048


 

The domain can be a user name or a group name or a wildcard. Do read the documentation that is in the limits.conf file itself before making any changes to it.


|


用ulimit -Ha 看呢?

然后用ulimit -Hs 设置试试?

|
ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 4128
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4128
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

|
Linux和Unix对栈的使用不一样

    
 
 

您可能感兴趣的文章:

  • 关于linux下多线程的堆栈问题
  • linux下,进程的堆栈大小到底是OS决定的还是编译器决定的?
  • linux 0.11是如何使用堆栈的?
  • 为什么Linux的可执行映像中不包含堆栈的大小限制?
  • linux-0.00head.s中堆栈段的疑问
  • 请问linux中的堆栈
  • (100分急)怎么样才能让LINUX进程起多于255个线程还不影响堆栈
  • 如何在linux系统上看一个进程的所有线呈的堆栈情况?
  • linux下调试core的命令,察看堆栈状态命令
  • 看过linux情景分析的请进,有关用户堆栈扩展的问题
  • Linux的蓝牙堆栈 Affix
  • linux中到底有多少个系统空间堆栈??
  • linux c/c++ IP字符串转换成可比较大小的数字
  • windows 2000 访问linux下smaba时候 2G以上大小的文件显示出来的大小很奇怪
  • 根据文件大小查找文件的find命令举例(Linux,centos,redhat)
  • 在linux里进行磁阵划分(连接了实际的外界磁盘阵列)时,划分出来的实际大小和配置大小不同
  • linux内存管理中段的大小是固定值(或者有个最大值),还是随机根据运行程序需要设定段的大小
  • 关于LINUX下的大小写问题.着急
  • 求教:在Linux下的C语言中如何获取分区的剩余大小和文件的大小
  • 为什么linux不同的发行版本的大小有这么大的差别?
  • 修改LINUX内核让系统不区分大小写!
  • 请教,如何修改在虚拟机vmware中安装的linux的ramdisk大小?
  • linux c 如何创建固定大小的文件?
  • partitionmagic调整LINUX分区大小后的问题
  • linux文件系统调整大小的方法(linux调整分区大小)
  • linux 获得远程文件大小
  • 在LINUX环境下,怎样限定SendMail邮件服务器中邮件用户使用邮件空间的大小。。。。。。
  • 在Linux命令行方式下怎么看每个文件夹的大小
  • linux目录的大小是如何计算的?
  • 如何查看linux pagesize的大小
  • LINUX如何调整POSIX消息队列大小
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下通过crond实现自动执行程序
  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • linux上的程序怎样远程启动另一个linux系统上的某个程序
  • 如何使用linux下gdb来调试python程序
  • 在linux下面怎么安程序啊?我刚裝了一个 linux,下了一个迅雷安装程序,可是不知道怎么安装啊?真心请教。
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户
  • Linux程序员在公司里做什么程序?(Linux程序员请进)
  • 我的linux程序 如何 在pc机器上运行。现在我用arm-linux-g++ 编译后的程序在我的嵌入设备上运行。
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户 100分相赠
  • linux初学者一简单问题!在线送分!linux设备驱动程序一书的第一个程序.
  • 最进想学习LINUX程序设计,想了解一下在LINUX下的C++程序开发工具有哪些?有快速做界面的那种吗?
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊?
  • linux下,一个程序如何向另一个程序发送消息,另一个程序如何接收
  • 请问载linux下如何调试汇编程序,有没有像debug的程序。
  • linux的程序员是不是比windows程序员的薪水高啊?
  • 菜鸟求助:Linux 应用程序后台启动后关闭窗口程序退出
  • 请教:如何在linux服务器上实现一个程序,该程序可启动远程linux客户端上的一个脚本(sh后缀)的执行
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • secureCRT下Linux终端汉字乱码解决方法
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • Linux c字符串中不可打印字符转换成16进制
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法 iis7站长之家
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3