赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
本帖最后由 紫苏 于 2010-7-5 06:19 编辑
解释性语言运行程序的效率确实没有直接执行编译好的机器码高,但她的一大特点就是调试周期比编译性语言的周期短(这个周期的过程,前者是:编辑代码 - 解释 - 调试;后者是:编辑代码 - 编译链接 - 运行 - 调试)。解释性语言只需要整体分析一下语法,然后就马上开始执行第一条语句,而编译性语言在语法分析的同时还需要把所有代码编译为机器可读的二进制码,然后把不同的对象文件链接起来。这在制造原型和测试的时候就比较重要了,你调试的次数越多,就越能通过使用解释性语言来节省时间。编译性语言虽然也有一些优化速度的机制,如预编译文件,但整体还是不如解释性语言
恩,matz的确是这样想的,所以就抛弃了指针?
DeathKing 发表于 2010-7-5 01:14
其实不要指针的原因是多方面的,其中一个比较重要的是为了在内存托管机制下减少堆内存碎片——在大多数现代高级语言中,只要是有垃圾回收机制的,都不会提供指针。在堆中分配的内存通常都是零散的(这也是为什么这种内存区域叫“堆”,顾名思义,没有次序的一堆),会导致堆内存中产生很多碎片,而当对象被垃圾回收后,GC 就会紧缩内存,整理碎片,这样才能提高分配堆内存的效率(因为分配堆内存需要在“杂乱的一堆”中找到一块足够大的连续空间)。这样一来,就需要把内存中的对象移来移去,自然指向这个对象的引用的地址也会改变。由于所有该对象的引用在底层都是指向同一个指针(而这个对象唯一的指针又指向该对象),所以只需要改变这个指针的值,就能改变所有引用指向的值。但这在 C++ 中却是不可能的,因为 C++ 可以操纵任意数量的指针指向任意地址
除此之外还有其它原因,比如安全性:有指针就有可能导致内存泄漏,崩溃,访问不可访问、释放已被释放的地址而导致段错误等,引用则不会出现这些问题 |
|