鱼C论坛

 找回密码
 立即注册
查看: 2063|回复: 9

怎么用C语言检测栈的大小?

[复制链接]
头像被屏蔽
发表于 2014-6-9 20:40:59 | 显示全部楼层 |阅读模式
提示: 该帖被管理员或版主屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-9 20:41:00 | 显示全部楼层

汗。。。难道栈都还是小?
输入 0x1400000  试试喃,20M的栈。  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-9 22:06:47 From FishC Mobile | 显示全部楼层
本帖最后由 oggplay 于 2014-6-12 09:04 编辑

5楼看看吧。或者先看http://www.cnblogs.com/niocai/archive/2012/04/01/2428128.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-6-9 22:39:21 | 显示全部楼层
oggplay 发表于 2014-6-9 22:06
目前我所知道的是用调试工具,比如gdb、strace,自己编一个?还没那个能力 ,跟系统权限用户进程有关太复杂 ...

还是要谢谢你,只用C语言检测不出来吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-9 23:19:31 From FishC Mobile | 显示全部楼层
本帖最后由 oggplay 于 2014-6-12 09:33 编辑

我的系统用ulimit -s 查看。
系统调用:
#include <sys/resource.h>

int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit *rlim);

参数:

resource:可能的选择有

RLIMIT_AS //进程的最大虚内存空间,字节为单位。
RLIMIT_CORE //内核转存文件的最大长度。
RLIMIT_CPU //最大允许的CPU使用时间,秒为单位。当进程达到软限制,内核将给其发送SIGXCPU信号,这一信号的默认行为是终止进程的执行。然而,可以捕捉信号,处理句柄可将控制返回给主程序。如果进程继续耗费CPU时间,核心会以每秒一次的频率给其发送SIGXCPU信号,直到达到硬限制,那时将给进程发送 SIGKILL信号终止其执行。
RLIMIT_DATA //进程数据段的最大值。
RLIMIT_FSIZE //进程可建立的文件的最大长度。如果进程试图超出这一限制时,核心会给其发送SIGXFSZ信号,默认情况下将终止进程的执行。
RLIMIT_LOCKS //进程可建立的锁和租赁的最大值。
RLIMIT_MEMLOCK //进程可锁定在内存中的最大数据量,字节为单位。
RLIMIT_MSGQUEUE //进程可为POSIX消息队列分配的最大字节数。
RLIMIT_NICE //进程可通过setpriority() 或 nice()调用设置的最大完美值。
RLIMIT_NOFILE //指定比进程可打开的最大文件描述词大一的值,超出此值,将会产生EMFILE错误。
RLIMIT_NPROC //用户可拥有的最大进程数。
RLIMIT_RTPRIO //进程可通过sched_setscheduler 和 sched_setparam设置的最大实时优先级。
RLIMIT_SIGPENDING //用户可拥有的最大挂起信号数。
RLIMIT_STACK //最大的进程堆栈,以字节为单位。

以下是程序,windows是否能运行看你的功力:lol:



apue.c.zip

1.13 KB, 下载次数: 2

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-10 00:20:36 | 显示全部楼层
好像, 今天去书店, 看了本关于linux内核的书, 有介绍。 你找找看——,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-6-10 00:30:33 | 显示全部楼层
喜欢散步 发表于 2014-6-10 00:20
好像, 今天去书店, 看了本关于linux内核的书, 有介绍。 你找找看——,

这么深奥呀,我以为很简单呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-10 08:02:02 | 显示全部楼层
如果是用的vc6编译器,默认的栈空间大小是1M, 改变默认栈大小的方法是:
在”工程“菜单中,选择”设置“,然后选择”连接“选项卡,在”分类“下拉菜单中,选择”输出“,然后在”堆栈分配“框中输入一个较大的数目,单位是字节。

希望能帮到你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-6-10 14:28:58 | 显示全部楼层
txt888 发表于 2014-6-10 08:02
如果是用的vc6编译器,默认的栈空间大小是1M, 改变默认栈大小的方法是:
在”工程“菜单中,选择”设置“ ...

这个我网上搜过,可是我在里面输入9999999,递归还是很快就崩溃。不知那里面怎么设
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-6-11 10:15:30 | 显示全部楼层
txt888 发表于 2014-6-11 09:06
汗。。。难道栈都还是小?
输入 0x1400000  试试喃,20M的栈。

那个我不知是不是直接输整数就行,增大了后和原来差不多,都是在1000次遗归后崩溃。1M也是,改成999999999999也是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 16:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表