免费注册 查看新帖 |

Chinaunix

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

【已解决】关于数组申请后的内存占用问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-01-10 19:46 |只看该作者
原帖由 beepbug 于 2010-1-10 13:46 发表
C/C++的数组,边界只是在地上划一条线,这边是我家,那边是你家,你不要过来。可他伸脚进来,并没有任何东西挡着他。和别的语言不一样。
因此猜想,这多留一些荒地,就不太容易冲到别人园子去,别人也不太容易 ...


恩,有空去看看标准,大家都在说,貌似很火啊~~

论坛徽章:
0
12 [报告]
发表于 2010-01-10 19:50 |只看该作者
原帖由 群雄逐鹿中原 于 2010-1-10 19:46 发表
debug需要,检测数组越界。用-O2 和 -O0都编编看? 我从来都是靠猜想的,信则灵。
对齐一说无根据无迹象表明反之不对齐。


GCC没试过,一会去试试,不过vs2008_release显示的是没有规律,就连之前连续排列的非数组元素也不挨着了,所以就没仔细看。

论坛徽章:
0
13 [报告]
发表于 2010-01-11 08:07 |只看该作者
原帖由 -liupangzi- 于 2010-1-10 19:41 发表


谢谢。

刚开始我确实是这么猜想的,可能编译器不会像人一样偷懒,但打印出来的结果也表明,除了数组,其他的变量在内存中是按照申请的顺序排列的,所以有些想当然的当成是这样了~

如果不这样想,问题 ...

对不起,你没看懂我的意思。C/C++标准同样没规定分配变量的实际空间,必须是随机的。我的意思是,C/C++标准没规定:
1)源码中变量的顺序,就是目的码或实际运行时内存中的顺序。
这意思是,如果你自己搞一个编译器,可以将它们整得相同顺序,也可以有所不同,甚至完全搞乱。
2)如果源码里相邻的两变量在目的码里也正好相邻,标准也没规定它哥俩必须紧挨在一起。
也就是说,紧挨着,标准不反对,隔开的,标准也不反对。
其实,不光是C/C++,其它高级语言也没规定。如果连这些都规定死了,那它就不是高级语言了,因为它把高级语言最基本的特殊也取消了。
你以为的东西,只有汇编语言才是这样。
虽然有许多人说,C/C++不算很完备的高级语言,但是,在这方面,它还是不容置疑的。
请记住,C/C++是高级语言,这样你就不会去钻这个牛角尖了。

论坛徽章:
0
14 [报告]
发表于 2010-01-11 11:17 |只看该作者
原帖由 beepbug 于 2010-1-11 08:07 发表

对不起,你没看懂我的意思。C/C++标准同样没规定分配变量的实际空间,必须是随机的。我的意思是,C/C++标准没规定:
1)源码中变量的顺序,就是目的码或实际运行时内存中的顺序。
这意思是,如果你自己搞一 ...


我想这回我是明白了~

可能上几个帖子我没说明白,不好意思。

谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP