免费注册 查看新帖 |

Chinaunix

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

[C] 为什么这种写法不抱错  关闭 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2009-07-10 17:54 |只看该作者
原帖由 beepbug 于 2009-7-10 06:33 发表

在C里,是这理。C不同于其它高级语言的特征之一,就是它的“边界”只是画在地上的一条线,而不是栅栏。它只防君子不防小人。
至于你跑出去了,会怎么样,它也不管的。可能掉入邻居家的陷阱里,也可能让你占了 ...

说明一下,这个“邻居”不是指外国(另一进程)邻居,是指同一进程里的另一实体。
这里只涉及到C数组“边界”。打引号的意思是,根本不存在边界。你必须自己管住自己,不要上错床!
跑到另一进程去,那不是一简单事。那是黑道的事。

论坛徽章:
0
32 [报告]
发表于 2009-07-11 23:27 |只看该作者
因为系统实际分配内存时,是按4K的页面分配的。

论坛徽章:
0
33 [报告]
发表于 2009-07-12 06:29 |只看该作者
原帖由 l.darkfire 于 2009-7-11 23:27 发表
因为系统实际分配内存时,是按4K的页面分配的。

对,我们忘了这旮沓了。
最后做实存分配是以4KB页为单位的。我只要1B,它也分配4KB。
1)虚存里数组“越界”了,可实存里还在这4KB页内;
2)虚存里数组“越界”了,在实存里也已超出这4KB页范围。
这两种情况肯定有差异。至于各自会有啥表现,那要看具体的系统。
不管怎么说,这事,C标准没规定。凡是做了C没规定的事,那就是你的BUG。不管报不报错,都是你的BUG。

论坛徽章:
0
34 [报告]
发表于 2009-07-12 08:19 |只看该作者
原帖由 foolishx 于 2009-7-9 14:23 发表
这种问题怎么总有人问呢?

情况是这样子的:操作系统会将内存分为“系统内存”和“用户内存”两大块。

系统内存的大小是一定的,由操作系统自己使用,用户程序没有办法访问这块空间,或者一旦用户进程访问 ...


所有用户态进程共享堆空间?? 真的是这样吗??
要是这样,那堆空间的管理可就费劲了!
所有用户态共用内存我同意,但也就是物理内存级别上的吧!

每个进程都有自己独立的地址空间,为什么堆空间却要共享??

论坛徽章:
0
35 [报告]
发表于 2009-07-12 17:37 |只看该作者

回复 #9 aaaaa5aa 的帖子

如果能轻松的访问其他进程的空间,是否可以认为有安全问题?

确实不太合理。

论坛徽章:
0
36 [报告]
发表于 2009-07-13 12:18 |只看该作者
原帖由 foolishx 于 2009-7-9 07:23 发表
这种问题怎么总有人问呢?

情况是这样子的:操作系统会将内存分为“系统内存”和“用户内存”两大块。

系统内存的大小是一定的,由操作系统自己使用,用户程序没有办法访问这块空间,或者一旦用户进程访问 ...


您自个儿没整明白还不问,所以到现在还是稀里糊涂。一大段解释基本属于闭着眼睛胡呲,找篇关于Linux内存管理的文章罚抄20遍。

论坛徽章:
0
37 [报告]
发表于 2009-07-13 12:43 |只看该作者
C/C++被指不好的一个地方就是没有数组越界检查
这个程序编译是不会报错的,运行时会不会报错就看运气了

论坛徽章:
0
38 [报告]
发表于 2009-07-13 16:53 |只看该作者

回复 #1 shuchi91 的帖子

c的编译分为保护模式和实模式,例如vc就是保护模式,因此如果下标越界,编译不报错,但运行不了。若在实模式下则没有任何问题

论坛徽章:
0
39 [报告]
发表于 2009-07-13 17:24 |只看该作者
不会报错的,真因为C/C++不报这个错误所以出现了JAVA,如果输出的是其他进程的才会导致程序运行错误

论坛徽章:
0
40 [报告]
发表于 2009-07-13 20:01 |只看该作者
地址越界gcc是不報錯的。
C是沒有越界檢查的。
不過有個專門檢查地址越界的工具。

[ 本帖最后由 xieweihua 于 2009-7-13 20:08 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP