免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1207 | 回复: 8
打印 上一主题 下一主题

国庆快乐,顺便帮小弟解决几个问题 :em02: [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-01 01:35 |只看该作者 |倒序浏览
孟岩翻译的几句话 “虽说C语言在内存管理方面存在严重的缺陷,不过它还是在某些应用领域里称王称霸”“就我这里讨论的每一种语言而论,只要你发掘的足够深,到最后你会看到它们的内核都是用纯正的、可移植的C写成的”“到了今天这个时候,我们最好把C看成是UNIX虚拟机上的高级汇编语言”

见 http://blog.csdn.net/myan/archive/2003/05/15/1923.aspx

我有两个问题:

  上面首先肯定了c语言在内存管理上有严重的漏洞,然后肯定了C++,java,python等都是建立在纯正的、可移植的c语言之上。我想问的是,java本身是自动管理内存的,也就是说java编译的代码本身不存在内存管理问题,但它的虚拟机运行时环境是建立在c上面的,而c存在问题,可不可以认为java底层也会有所谓的内存问题?比如说jvm的缓冲区溢出漏洞。如果有 可否利用该漏洞使java代码也变相成为存在缓冲区溢出漏洞,再利用这个漏洞取得管理权限?因为任何的程序都存在漏洞的,所以我认为jvm也不例外。

  “c语言在内存管理上有严重的漏洞”,这个漏洞是谁提供的?比如java代码的内存回收是由jvm完成的,而我们“把C看成是UNIX虚拟机上的高级汇编语言”,这个时候c的虚拟机就是unix,是不是也就是说这个漏洞一部分也是由unix提供的?同时unix的绝大部分硬件无关的代码又是c写成的,c又是运行在unix虚拟机上的,……  那不是形成了一个恶性的循环?另外与c编译器本身不检查数组越界、允许强制转型有关系吗?这里没有提到程序员的问题,而仅仅把主语限定在了c语言上,那可否认为抛开程序员的不良编码这个因素,为了追求效率和简洁,c的语法、语义、和其思想本身就允许这个漏洞的存在?

思维有点混乱,不知道描述清楚我的问题没有。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-10-01 09:34 |只看该作者

国庆快乐,顺便帮小弟解决几个问题 :em02:

》》c语言在内存管理上有严重的漏洞
我对这句话的理解就是c编译器本身不检查数组越界,而且没有
自动的垃圾回收功能。呵呵,可别忘了unix系统是由c语言写的。

论坛徽章:
0
3 [报告]
发表于 2004-10-01 15:50 |只看该作者

国庆快乐,顺便帮小弟解决几个问题 :em02:

C 好比一把利器,使用得当,自然功效非凡。
所以,申请了内存要记得释放,自然就不会出现什么内存泄漏的问题。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-10-01 16:53 |只看该作者

国庆快乐,顺便帮小弟解决几个问题 :em02:

考虑不周全的程序员才会觉得C是有缺陷的。而其实,这些缺陷是程序员的。他们却总想让语言去解决。java的所谓垃圾回收机制正好迎合了这些人的心理。

论坛徽章:
0
5 [报告]
发表于 2004-10-07 12:59 |只看该作者

国庆快乐,顺便帮小弟解决几个问题 :em02:

楼上的,支持!

论坛徽章:
0
6 [报告]
发表于 2004-10-07 13:12 |只看该作者

国庆快乐,顺便帮小弟解决几个问题 :em02:

谢谢大家的
我也知道使用内存的良好方式,我现在想知道的是:可否认为抛开程序员的不良编码这个因素,为了追求效率和简洁,c的语法、语义、和其思想本身就允许这个漏洞的存在?(没有包括程序员素质的高低这个因素)

论坛徽章:
0
7 [报告]
发表于 2004-10-07 14:26 |只看该作者

国庆快乐,顺便帮小弟解决几个问题 :em02:

我们可以这样理解:
每一个国家里面都会有人杀人放火抢劫#¥%……而每一个国家都有相应的法律
Java世界里面法律很严格,但是这也意味着要用更多的资源去维护这样一个严格的法律
C世界就相对宽松,但是如果每个人都能自觉要求自己,那么这个世界就是高效的,否则,这个世界就会非常混乱
不知道我这么说你能不能明白?

论坛徽章:
0
8 [报告]
发表于 2004-10-07 14:40 |只看该作者

国庆快乐,顺便帮小弟解决几个问题 :em02:

呵呵,有道理,这个解释有创意,C就像梦想中的共产主义。谢谢

论坛徽章:
0
9 [报告]
发表于 2004-10-07 14:54 |只看该作者

国庆快乐,顺便帮小弟解决几个问题 :em02:

其实没有那么简单的~
嗯……给你个建议啊:在思考这种问题的时候,最好能在眼前浮现出一片广阔无垠的内存空间~(嘿嘿~我该去主持动物世界~)
在C的世界中,这片内存空间很自由:你想在哪写在哪写~想写哪写哪——只要空间允许,而且操作系统不抗议(暂时就先不去考虑什么虚拟地址的东西~我们假定都是工作在实模下)。你写了一篇内存,可以不释放,但是如果你总不释放,你会逐步发现:没有地方写新东西了(要是考虑还有其他程序跟你一起用这内存……后果可想而知啦~)
而java世界里面就不一样了,你写了点东西吧,可以不用管,以后这东西不用自然有人会清理~
java这种东西的理念很好,而且这种理念可以应用在很多领域。但是……Java的效率……尽管很多手机上都在芯片级实现了JVM,但是在PC机上就……简单说来:java是由一群精英设计出来的,集合了很多高新算法的,给懒人用的语言
相比之下Perl就更好~效率不错,也有简单的垃圾回收(或曰“贫民的垃圾回收机制”)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP