鱼C论坛

 找回密码
 立即注册
查看: 1889|回复: 7

[已解决]求问一个C语言程序在内存中分配问题

[复制链接]
发表于 2019-9-18 08:46:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是一到考研C语言题,题目和答案如图。我的疑问是,根据小甲鱼的书,字符串常量应该在代码段,也就是地址最低的地方,而运行到fun函数时,它的变量应该在栈里,也就是高地址处。那这个答案就是错的,但是正确的应该是什么样呢?
最佳答案
2019-9-18 12:37:46
字符串常量有可能在代码段,但是不是一定在代码段
一些编译器把字符串常量放在代码段,因为字符串常量和代码都是只读的,放在一起不会有什么问题
但是编译器完全可以为字符串常量另起一个段,操作系统加载程序的时候也完全可以为字符串常量另起一个段

无标题1.png
无标题2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-18 09:59:52 | 显示全部楼层

回帖奖励 +5 鱼币

这里的2018 需要占内存吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-18 12:31:44 | 显示全部楼层
mqcake 发表于 2019-9-18 09:59
这里的2018 需要占内存吗?

需要
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-18 12:37:46 | 显示全部楼层    本楼为最佳答案   
字符串常量有可能在代码段,但是不是一定在代码段
一些编译器把字符串常量放在代码段,因为字符串常量和代码都是只读的,放在一起不会有什么问题
但是编译器完全可以为字符串常量另起一个段,操作系统加载程序的时候也完全可以为字符串常量另起一个段

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

使用道具 举报

发表于 2019-9-18 12:42:53 | 显示全部楼层
“字符串常量应该在代码段,也就是地址最低的地方,而运行到fun函数时,它的变量应该在栈里,也就是高地址处。”

这句话你是如何理解的?
char *p = "COMPUTER";
p是一个变量,是一个局部变量,这个p在栈中,这个变量中保存了一个地址,保存了"COMPUTER"这个字符串的起始地址,也就是变量p中保存着字符C的地址,而"COMPUTER"这个字符串保存在常量区

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

使用道具 举报

 楼主| 发表于 2019-9-18 18:59:08 | 显示全部楼层
人造人 发表于 2019-9-18 12:42
“字符串常量应该在代码段,也就是地址最低的地方,而运行到fun函数时,它的变量应该在栈里,也就是高地址 ...

我自己讲话没讲清楚。我只是看到小甲鱼的例子,main函数里的字符串常量在代码段,也就是地址很低的地方。而答案中main和fun的活动记录我都认为属于代码(这里可能我想的就不对,活动记录不光是代码),那字符串常量在图的另一头,那就是高地址处,所以疑惑了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-18 19:00:59 | 显示全部楼层
人造人 发表于 2019-9-18 12:37
字符串常量有可能在代码段,但是不是一定在代码段
一些编译器把字符串常量放在代码段,因为字符串常量和代 ...

如果您方便的话可以请您回答一下这个问题吗?我感觉这个答案不太对,很别扭,不知道是怎么组织出来的。谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-18 22:11:11 | 显示全部楼层
唯伊堇 发表于 2019-9-18 19:00
如果您方便的话可以请您回答一下这个问题吗?我感觉这个答案不太对,很别扭,不知道是怎么组织出来的。谢 ...

我不是很明白你的问题
qq: 1440332527
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-4 09:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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