- 论坛徽章:
- 0
|
本帖最后由 狗蛋 于 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个知识点,你有能力一个个的用几句简单的人话说清楚吗? |
|