http://benchmarksgame.alioth.debian.org/处的语言枪击基准测试表明FPC程序使用大约 1/50 的内存,使用g ++可比较的程序使用。这些基准测试是否无意中支持fpc,或者FPC 这个比g ++好得多吗?我一直认为这些基准测试是一系列不错的微基准测试,因此我对这些结果感到惊讶,因为相当于50倍的因素是相当重要的恕我直言。
参考文献:
http://benchmarksgame.alioth.debian.org/u32/pascal.php http://benchmarksgame.alioth.debian.org/u64q/pascal.html
修改 自this页面声称pascal仅对某些程序使用8KB这看起来非常低时,这变得更加有趣
答案 0 :(得分:11)
请注意,启动时间是IIRC,FPC达到峰值的另一个基准
我认为答案必须主要是因为Free Pascal默认静态链接程序,避免使用libc和其他辅助库
这有几个后果:
总而言之,我认为这种观察到的行为
在分配地址空间被计算而不是实际使用专用字节的情况下,或者因为它在子分配器和私有字节分配的专用字节之间没有足够的区别时,可能会出现对输出的偏差。进程实际使用的字节数。它可能需要一个libc / libmalloc核心开发来解决这个问题,而且由于枪战是开源的,你可以提供更好的测量问题是开放的。
或者(g)libc存在根本性的错误。 (我不是那里的专家)。获得更多相关信息的可能解决方案是在FreeBSD或带有uclibc的Linux上运行基准测试。简而言之,除了glibc之外别无其他。
正如Igouy所说,当链接到libc时,FPC会获得其他开发系统的(坏)特征。这是另一个指标,问题应该“为什么glibc使用二进制文件在枪战内存基准测试中表现不佳”而不是“为什么FPC在枪战基准测试中表现良好”
请注意,由于交叉分发兼容性问题,FPC最初避免使用libc,而不是性能或文件大小。
所有人都认为这是测量FPC内存使用量的侥幸,有人认为这是glibc内存使用或测量它的问题吗?或者更确切地说,高 glibc数字是错误的,而不是低FPC数....
....一名FPC开发人员......
(*)之前你可以说它只是为“大型”应用程序开发有效,请记住Unix 哲学是关于将小工具链接在一起,并且许多Unix进程短缺了
答案 1 :(得分:4)
是的,确实如此,unix实用程序top报告那些Pascal程序使用了那么多内存,而那些C ++程序使用了那么多内存。
例如,在x64上运行Free Pascal n-body program时运行C++ n-body program时,顶部会报告这些测量结果 -
VIRT RES SHR
608 4 0 FPC
7208 420 332 C++
Free Pascal程序的内存使用顶部报告 是 the memory use that the benchmarks game reports。
我们可以看到两种不同的情况:
Pascal和C ++程序都使用多个MB和内存使用 非常相似,相差不到2倍。当额外的内存是 分配来解决任务,之间没有太大的区别 程序
C ++程序使用几百KB而Pascal程序使用a 几KB。当没有分配额外的内存来解决任务时, Pascal程序使用的数量少了几百KB。
问题提出了两种选择,但通常还有第三种选择 - 我是否误解了发生了什么?
事实上,C ++ mandelbrot程序可以使用比Pascal mandelbrot程序多4000倍的内存,这对于OP来说太过于难以相信,它似乎不可能是OP - 但是有一个简单的解释, 时间/空间权衡。
使用多核编写的C++ program is multi threaded;但Pascal program is single threaded,写成使用单核。
Pascal multi threaded mandelbrot program的内存使用与C ++多线程程序的内存使用非常相似。