| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 635 人关注过本帖
标题:谭浩强的《C程序设计》第三版,怎么说变量在编译时分配存储单元?
只看楼主 加入收藏
suishuhao
Rank: 2
等 级:论坛游民
帖 子:89
专家分:10
注 册:2012-9-25
结帖率:61.9%
收藏
 问题点数:0 回复次数:6 
谭浩强的《C程序设计》第三版,怎么说变量在编译时分配存储单元?
40页:“每一个变量被指定为一个确定类型,在编译时就能为其分配相应的存储单元”
219页:“如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元”

只有全局和静态变量才在编译时分配并初始化嘛,
局部变量不是在程序运行过程中动态分配吗???
不止我有这个疑问,别人也有这个疑问:
https://bbs.bccn.net/thread-297574-1-1.html









搜索更多相关主题的帖子: C程序设计 存储 动态 
2013-02-21 20:44
信箱有效
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1102
专家分:4268
注 册:2012-6-19
收藏
得分:0 
你看 都没人回你。
你已经快走火入魔了。

因为你刚学 没有足够的知识积累  所以没必要深究这些。

40页:“每一个变量被指定为一个确定类型,在编译时就能为其分配相应的存储单元”
既然要死抠字眼 那你也没抠对地方哇。 是能为其分配相应的,这个是和前半句的 确定的类型对应的。  被指定为char int 数组等等的某个确定的类型,然后编译时就能为其分配相应的内存单元。  类型不确定 谁知道该给它分配什么样的存储单元呢。 这句的重点不是要告诉你编译时给它分配 而是告诉你要有确定的类型 才能给它分配相应的单元。

219页:“如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元”
就拿你很疑惑的局部变量来讲,你已经知道这个是在“动态分配”的栈区。
当然是在栈。
进入函数后 栈顶指针esp减小 分配了空间。
分配多少 这个就是在编译时确定的,编译器计算该函数所需的局部变量空间大小,并且用适当的方式进行优化。
因为编译时就明确了这个函数局部变量需要在栈中使用多少空间,所以当然可以说编译时分配。

到时候给你在这儿点儿地方 ,不到时候不给你。何时 何地 数量 在编译时就都已经确定了,这才是局部变量空间 动态分配 的意思。另外一个 动态 的意思还包括在栈中是使用esp/ebp指针而不是像全局变量那样使用的是虚拟地址。

虽然尽量用简单直白的方式表达,恐怕你还是不能完全理解。还是那句,
没必要钻这些牛角尖,你这个问题发了好几个帖子,有这时间,都能看大半本书了。








收到的鲜花
  • suishuhao2013-02-22 09:14 送鲜花  3朵   附言:好文章
2013-02-22 01:53
詩蘭靜宵
Rank: 2
来 自:葫 芦 岛
等 级:论坛游民
帖 子:65
专家分:50
注 册:2013-2-16
收藏
得分:0 
回复 2楼 信箱有效
楼上兄台是东北人啊,,整点儿地方..哈哈

我猜测楼主应该是学生,而且经常应付考试.所以对公式理论什么的东西比较在意..

❀.新人一枚,多多指教!
2013-02-22 04:05
suishuhao
Rank: 2
等 级:论坛游民
帖 子:89
专家分:10
注 册:2012-9-25
收藏
得分:0 
以下是引用信箱有效在2013-2-22 01:53:35的发言:

你看 都没人回你。
你已经快走火入魔了。

因为你刚学 没有足够的知识积累  所以没必要深究这些。

既然要死抠字眼 那你也没抠对地方哇。 是能为其分配相应的,这个是和前半句的 确定的类型对应的。  被指定为char int 数组等等的某个确定的类型,然后编译时就能为其分配相应的内存单元。  类型不确定 谁知道该给它分配什么样的存储单元呢。 这句的重点不是要告诉你编译时给它分配 而是告诉你要有确定的类型 才能给它分配相应的单元。

就拿你很疑惑的局部变量来讲,你已经知道这个是在“动态分配”的栈区。
当然是在栈。
进入函数后 栈顶指针esp减小 分配了空间。
分配多少 这个就是在编译时确定的,编译器计算该函数所需的局部变量空间大小,并且用适当的方式进行优化。
因为编译时就明确了这个函数局部变量需要在栈中使用多少空间,所以当然可以说编译时分配。

到时候给你在这儿整点儿地方 ,不到时候不给你。何时 何地 数量 在编译时就都已经确定了,这才是局部变量空间 动态分配 的意思。另外一个 动态 的意思还包括在栈中是使用esp/ebp指针而不是像全局变量那样使用的是虚拟地址。

虽然尽量用简单直白的方式表达,恐怕你还是不能完全理解。还是那句,
没必要钻这些牛角尖,你这个问题发了好几个帖子,有这时间,都能看大半本书了。
大哥你讲的这些问题在什么课上有讲啊,或者什么书上?
2013-02-22 09:24
詩蘭靜宵
Rank: 2
来 自:葫 芦 岛
等 级:论坛游民
帖 子:65
专家分:50
注 册:2013-2-16
收藏
得分:0 
回复 4楼 suishuhao
那是汇编..

❀.新人一枚,多多指教!
2013-02-22 09:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
快递佬越来越厉害了噎

授人以渔,不授人以鱼。
2013-02-22 10:40
suishuhao
Rank: 2
等 级:论坛游民
帖 子:89
专家分:10
注 册:2012-9-25
收藏
得分:0 
以下是引用信箱有效在2013-2-22 01:53:35的发言:

你看 都没人回你。
你已经快走火入魔了。

因为你刚学 没有足够的知识积累  所以没必要深究这些。

既然要死抠字眼 那你也没抠对地方哇。 是能为其分配相应的,这个是和前半句的 确定的类型对应的。  被指定为char int 数组等等的某个确定的类型,然后编译时就能为其分配相应的内存单元。  类型不确定 谁知道该给它分配什么样的存储单元呢。 这句的重点不是要告诉你编译时给它分配 而是告诉你要有确定的类型 才能给它分配相应的单元。

就拿你很疑惑的局部变量来讲,你已经知道这个是在“动态分配”的栈区。
当然是在栈。
进入函数后 栈顶指针esp减小 分配了空间。
分配多少 这个就是在编译时确定的,编译器计算该函数所需的局部变量空间大小,并且用适当的方式进行优化。
因为编译时就明确了这个函数局部变量需要在栈中使用多少空间,所以当然可以说编译时分配。

到时候给你在这儿整点儿地方 ,不到时候不给你。何时 何地 数量 在编译时就都已经确定了,这才是局部变量空间 动态分配 的意思。另外一个 动态 的意思还包括在栈中是使用esp/ebp指针而不是像全局变量那样使用的是虚拟地址。

虽然尽量用简单直白的方式表达,恐怕你还是不能完全理解。还是那句,
没必要钻这些牛角尖,你这个问题发了好几个帖子,有这时间,都能看大半本书了。
大哥还有一个问题啊,编译后产生的OBJ文件是二进制代码,此时的OBJ文件中是不是就像汇编程序中的结构那样已经有了4个段????(或者说,已经定义了4个段)

[ 本帖最后由 suishuhao 于 2013-2-22 11:14 编辑 ]
2013-02-22 11:12
快速回复:谭浩强的《C程序设计》第三版,怎么说变量在编译时分配存储单元?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017751 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved