10
|
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳ · 技术社区 · 15 年前 |
![]() |
1
20
这个问题背后的前提有点诡异:
示例:
然而,你的问题背后有一个真实的观察: 使用手动内存管理的语言通常是编译的
总而言之:
是 主要关注编程语言的解释性实现。按字母顺序排列,Lua、Perl、PostScript、Python和Ruby都非常成功,Icon、Scheme和Squeak Smalltalk也相当成功。不可预测的延迟引起关注的唯一领域是硬实时计算,比如控制汽车刹车的ABS系统(如果你驾驶一辆足够豪华的汽车)。
编辑问题后添加的注释:
|
![]() |
2
4
Forth 有可以用FORGET释放的堆叠内存区域。 |
![]() |
3
4
世上没有 . 语言既不编译也不解释。一种语言 是 实施 ,他们有 没有什么 与语言有关。 每 二者都 C语言是编译语言吗?外面有C个口译员。Python是一种解释性语言吗?当前的8个Python实现都使用编译器。 所以,自从 每一个 是 其实C和C++的解释器就在那里。VxWorks实时操作系统甚至在内核中包含一个权限,NASA曾经使用这个解释器修复航天器上的一个有缺陷的内核模块。) 另一个例子是从1958年开始的Lisp的第一个版本:它有手动内存管理(基于引用计数),但是仅仅几个月后,它就被替换成了一个自动内存管理的版本,此后它就一直在使用这个版本。尽管如此, 任何 语言既可以用编译器实现,也可以用解释器实现,所以我不知道那个版本是有解释的实现还是编译的实现。(事实上,我不确定它是否被实现了 完全 如果您稍微放松一下您的标准,并意识到内存管理只是一般资源管理的一个特例,那么您将发现 全部的 语言,不管您是想将它们称为编译的或解释的,还是完全其他的,都至少有某种形式的手动资源管理 一些 资源类型(文件句柄、数据库连接、网络连接、缓存…)。 |
![]() |
4
2
|
![]() |
6
1
如果在上面的例子中,
你可以阅读其他问题,比如 circular references, on wikipedia . |
![]() |
7
1
这可能是某些系统的问题。对其他系统来说没什么问题。运行垃圾回收的软件可以比只调用malloc的系统更快地分配内存。当然,你最终会在GC时间支付时间。 以基于web的系统为例。您可以在处理请求期间分配所有内存,然后GC可以收集。结果可能不是那样的,但你明白了。 垃圾收集有很多不同的策略。哪种策略最适合系统将取决于需求。但即使你需要绝对决定论,你也可以使用如下方法: Realtime Java |
![]() |
8
0
解释
并不一定意味着
. Perl、Tcl、Python等,我相信它们都使用简单的引用计数,所以内存回收是确定的,尽管不是透明的(曾经尝试过
|
![]() |
9
0
Python的API通常允许打开或关闭延迟的垃圾收集- http://docs.python.org/library/gc.html 但与静态语言相比,这并不是导致速度缓慢的原因——数据本身的动态特性是造成速度差异的主要原因。 |
![]() |
TheKing · 为什么数组的地址可以有负值? 3 年前 |
![]() |
yurnero · MATLAB:“加载”一个快速访问功能 7 年前 |
![]() |
joe · 一页可以同时在两个工作集中吗? 7 年前 |
![]() |
Jaques · “.exe”已触发断点 7 年前 |
![]() |
adn bps · 在函数中修改变量的高效内存方法 7 年前 |
![]() |
Gauraang Khurana · C语言中分段错误的不稳定行为 7 年前 |
![]() |
Rajesh K · 如何查找设备中存在的广告垃圾? 7 年前 |