免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pmerofc
打印 上一主题 下一主题

[低水平帖]啥叫堆?啥叫栈? [复制链接]

论坛徽章:
0
181 [报告]
发表于 2011-09-22 10:44 |只看该作者
栈的大小也可以运行时修改
koolcoy 发表于 2011-09-21 15:10

请问如何修改呢?能否举例说明一下?

论坛徽章:
0
182 [报告]
发表于 2011-09-22 11:01 |只看该作者
少数系统支持运行期修改进程本身的stack大小:
sstk(2) - Linux man page
Name

sstk - change stack size
Synopsis

caddr_t sstk(int incr);
Description

(From the 4.3BSD Architecture Manual)

Each process begins execution with three logical areas of memories called text, data and stack. The text area is read-only and shared, while the data and stack areas are private to the process. Both the data and stack areas may be extended and contracted on program request. The call

    caddr_t addr = sbrk(incr);
changes the size of the data area by incr bytes and returns the new end of the data area, while
    caddr_t addr = sstk(incr);
changes the size of the stack area. The stack area is also automatically extended as needed. On the VAX the text and data areas are adjacent in the P0 region, while the stack section is in the P1 region, and grows downward.

Note

This call is not supported in 4.3BSD or 4.4BSD or glibc or Linux or any other known Unix-like system. Some systems have a routine of this name that returns ENOSYS.
See Also

sbrk(2)


linux系统下,运行期修改ulimit -s将影响之后创建的线程/进程,但不能修改当前进程的栈大小:
"On Linux/x86-32, the default stack size for a new thread is 2 megabytes", Unless the RLIMIT_STACK resource limit (ulimit -s) is set: in that case, "it determines the default stack size of new threads".

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
183 [报告]
发表于 2011-09-22 11:17 |只看该作者
本帖最后由 koolcoy 于 2011-09-22 11:19 编辑
少数系统支持运行期修改进程本身的stack大小:


linux系统下,运行期修改ulimit -s将影响之后创建的线程 ...
狗蛋 发表于 2011-09-22 11:01


ulimit, setrlimit

论坛徽章:
0
184 [报告]
发表于 2011-09-22 11:22 |只看该作者
本帖最后由 狗蛋 于 2011-09-22 11:23 编辑
ulimit, setrlimit
koolcoy 发表于 2011-09-22 11:17


没遇到过类似需求,还以为是理论上没有困难但实践上没人去做的那类问题……

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
185 [报告]
发表于 2011-09-22 21:43 |只看该作者
回复 170# pmerofc


    兄弟,老哥哥跟你说,你这么搞下去,一辈子没希望在计算机上学出点东西来了。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
186 [报告]
发表于 2011-09-22 22:24 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
187 [报告]
发表于 2011-09-22 22:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
188 [报告]
发表于 2011-09-23 00:43 |只看该作者
回复 168# 狗蛋


   
前面有高人质问:没有栈,你怎么实现线程?
嗯,低水平回答:很明显,没有堆,线程才会无法创建;有栈没栈关线程实现鸟事。
至于栈嘛……它是为了方便函数/过程调用的。


     你写了一大堆,浏览过了。
     我在前面的回复中一直强调了,一个东西是否是“栈”,只跟它是否具有LIFO性质有关。

    许多线程库实现都是使用栈来实现函数调用链。在这种情况下,线程就是栈相关的。说线程不是栈相关的,因为它的内存是从“堆”上来的,未免可笑了吧,你自己也说了,“栈”和“堆”的本质区别是“管理内存的方式”,而不是“它放在什么位置、它的起始点在哪里”。

    ---- 先别提那些神马coroutine、functional Programming Paradigm之类的,虽然我lisp是菜,SICP也没仔细参详过,不过想用这些名词随便蒙蒙我也不见得就那么管用。
    以下事实,在当前的C/C++语言写的应用中,以及各种主流操作系统上都成立(也包括Java和JVM、C#及其Runtime之类的)。
    1.一个单线程的进程,它的执行流在一个栈中穿行。这个栈的起始点,你爱定到哪就定到哪(不清楚gcc或者linux操作系统有没有提供设定进程栈从哪里开始的选项),在x86_32平台上就是设定下寄存器%ebp, %esp的事。
    2.一个线程说白了就是一个函数调用链。
    3.如果函数调用链用栈来实现,那么一个运行时栈就是一个线程。
    4.多线程,就是有很多栈。一个线程一个栈。每个栈可以以任意起始点开始(除该进程的主线程之外),栈的大小随意定。因此如何调度这些线程,以及如何进行资源管理是很重要的内容。

    有栈没栈关线程鸟事吗?...
    我要说的是,线程就是运行时栈嘛,你说关不关事。

    非要说:那建立这些活动线程栈的内存是从“堆”上来的,没“堆”你怎么创建活动线程栈? -- 那我把进程栈设定为无限制,在某函数内放一大buf, 用这个buf来建立活动线程栈可以不? -- 你不还给了个例子嘛。这个buf是“堆”(应该用“堆”来看待它啊,因为它是“堆式管理”啊...) -- 但是建立在上面的有用的东西是啊,而且这buf还真是从“栈”上来的啊! -- 结论是,这问题真扯得没意思了。

    非还要扯别的那我没办法了。比如xx的实现没有使用栈啊,不用栈也可以实现xx啦。好嘛,你喜欢那么说呗

    一句话,坚持我的观点:栈是目前计算机技术中最重要的概念之一
   
    ps, 叔叔我既然是在一个低水平贴里面回帖,果断没想别人当自己是高水平的。不过是一些观点共享而已。我不像某些人会说:“话题错了就算了,回复内容也是错误百出(大意如此)”这种话。

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
189 [报告]
发表于 2011-09-23 09:39 |只看该作者
回复  塑料袋
    谢谢。我想我知道我是谁,也知道我要做什么
   不过我倒是真想知道,在这个国家,谁在计算机上学出点东西来了
pmerofc 发表于 2011-09-22 22:24


我也曾经这么想过。

不过后来发现别说那些隐藏BOSS,TMD只说随便在大街上走走就能遇到的那些大高手已经不少了:王齐,吴峰光..................

再加上那些隐藏的,绝对是个高手可以车载斗量的时代。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
190 [报告]
发表于 2011-09-23 09:52 |只看该作者
我也曾经这么想过。

不过后来发现别说那些隐藏BOSS,TMD只说随便在大街上走走就能遇到的那些大高手已 ...
塑料袋 发表于 2011-09-23 09:39


那些算什么高手啊, 他们知道c标准第1234个英文字符是哪一个啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP