免费注册 查看新帖 |

Chinaunix

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

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

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

论坛徽章:
0
82 [报告]
发表于 2011-09-07 00:36 |只看该作者
看来你装B真是很上瘾,要是这样能让你自我感觉良好,随你吧
pmerofc 发表于 2011-09-07 12:33 AM



    马骝,尔要尽到责任,尔责任何其重啊~~~

  我等开心的来源啊。。

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


      没,真心地说,这些书我仍时不时翻看。如果说数据结构和算法是学习语言的内功,那这些书就是深入系统的内功。

    毕竟到了最后都还是要看书的~ 话说就算C++之类的再怎么NB,最后还不是跳不出编译原理之类的东西么~

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


    哎,你妹,去给我头像那个MM看病去吧,你知道她闹得最疯了,不是外星人她都不感兴趣,还引来了异次元的东西~

论坛徽章:
0
85 [报告]
发表于 2011-09-07 00:50 |只看该作者
回复 84# captivated


    嗯~~不好笑。  

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

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

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
88 [报告]
发表于 2011-09-07 12:51 |只看该作者
每个版都有娱乐贴嘛。

论坛徽章:
0
89 [报告]
发表于 2011-09-07 13:17 |只看该作者
本帖最后由 狗蛋 于 2011-09-07 13:20 编辑

1、计算机并不一定要有栈,或者说处理器指令集中并不一定必须有push/pop

作为一种通用程序设计语言,整个ansi c标准文本里小心翼翼的避免在任何地方提到stack/heap,正是因为C是机器无关的,不需要也不应该去关心栈是否存在——让在特定的哪种机器上实现编译器的家伙头疼去吧。

当然,作为一个在有栈的机器上编码的程序员,你自然可以窥视下这种机器上C是如何实现函数调用的——这事常混本论坛的随便抓个都很有可能清清楚楚;不过即便知道了这点,也完全用不着搞得好像任何OS、任何机器都必须长你那样似得吧。

http://zh.wikipedia.org/wiki/%E5 ... B%E6%A9%9F%E5%99%A8
http://zh.wikipedia.org/wiki/%E5%AF%84%E5%AD%98%E5%99%A8%E6%9C%BA
堆疊結構機器
维基百科,自由的百科全书

堆疊結構機器(英语:Stack machine),又稱堆疊機器,電腦科學中一種計算模型。這種類型的電腦,記憶體以堆疊(Stack)儲存。

這種機器,它的指令集中包含了零位址指令("0-operand" instruction set)。硬體在執行運算時,到堆疊的頂端去取出運算元,至運算結束時,再儲存到堆疊的頂端。

相較於累加器(採用 "1-operand instruction set") ,和寄存器機("2-operand instruction set" 或 "3-operand instruction set"),用零位址指令("0-operand instruction set")實作的堆疊機器,它的好處是程式碼密度(code density)相對較大,因此,它的程式通常較小。



2、字符串123究竟在哪里啊?栈上还是堆上还是超出人类理解范围的某个特殊地方?
#include <stdio.h>
  2
  3 static char *print(void)
  4 {
  5         char *tmp;
  6         tmp = "123";
  7         return tmp;
  8 }
  9
10 int main()
11 {
12         printf("%s\n", print());
13         return 0;
14 }

字符串123是分配在栈上还是堆上阿?它又是什么时候释放空间的呢?
round_robin 发表于 2011-09-05 10:26


由1可知,学C完全不需要堆/栈相关的任何知识,没必要把C绑死在某个机器结构的战车上;而2的问题在于,即便按照现实常见情形,默认他问的是x86机器上的C,这个堆和栈出现的也过于匪夷所思了。

请问楼下,你打算怎样回答这个问题?
请正面回答,提问者真正不知道的,是字符串123究竟在堆上还是栈上呢(1),还是堆和栈究竟是什么(2)?或者,¨低水平¨一点,C语言关于局部变量和字符串常量究竟是怎样规定的(3)?

最后,仍请正面回答,如上3个知识点,你有能力一个个的用几句简单的人话说清楚吗?

论坛徽章:
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
90 [报告]
发表于 2011-09-07 13:42 |只看该作者
1、计算机并不一定要有栈,或者说处理器指令集中并不一定必须有push/pop

作为一种通用程序设计语言,整个 ...
狗蛋 发表于 2011-09-07 13:17


我不正面回答你任何问题, 我反问: 人家说自己在“学习” C 语言吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP