Sud*_*n S 9 g++ freepascal fpc
在语言枪战基准http://benchmarksgame.alioth.debian.org/表明FPC程序使用约1 /第50次的存储器的,使用克++使用比较的方案.难道这些基准无意青睐FPC或者是难道真的是FPC是这要比G ++好?我一直认为这些基准测试是一系列不错的微基准测试,所以我对这些结果感到惊讶,因为50倍是相当重要的恕我直言.
参考文献:
http://benchmarksgame.alioth.debian.org/u32/pascal.php http://benchmarksgame.alioth.debian.org/u64q/pascal.html
编辑: 这变得更加有趣,因为这个页面声称pascal只使用了8KB的一些程序,这看起来非常低
Mar*_*ort 11
请注意,启动时间是IIRC,FPC达到峰值的另一个基准
我认为答案必须主要是因为Free Pascal默认静态链接程序,避免使用libc和其他辅助库
这有几个后果:
总而言之,我认为这种观察到的行为不是关于FPC,而是关于其他基准开发系统之间缺乏变化.FPC只是站出来,因为几乎一切是建立在海合会/ glibc的技术之上(或者是因为他们是直接gcc衍生物或因为他们的VM /口译员都是建立在GCC的顶部),因此,所有的份额libc中的一般对待.不同的FPC只是强调了(g?)libc对简单程序的不良扩展.(*)
点球大战很可能会在这个意义上被偏压,要么共享寻址空间被计数,而不是实际使用的专用字节,或者是因为它不实际使用过程中的suballocator和专用字节分配的专用字节之间有足够的区分.它可能需要一个libc/libmalloc核心开发来解决这个问题,并且由于枪战是开源的,所以你能提供更好的测量的问题是开放的.
(g)libc或者存在根本性的错误.(我不是那里的专家).获得更多相关信息的可能解决方案是在FreeBSD或带有uclibc的Linux上运行基准测试.简而言之,除了glibc之外别无其他.
正如Igouy的帖子所述,当链接到libc时,FPC获得了其他开发系统的(坏)特征.这是另一个指标,问题应该是"为什么glibc使用二进制文件在枪战内存基准测试中表现不佳",而不是"为什么FPC在枪战基准测试中表现良好"
请注意,由于交叉分发兼容性问题,FPC最初避免使用libc,而不是性能或文件大小.
因此,对于所有假设这是测量FPC的内存使用量的侥幸,有人认为这是glibc内存使用或测量它的问题吗?或者更确切地说,高 glibc数字是错误的,而不是低FPC数....
.... FPC开发人员......
(*)和之前你可以说这仅仅是发展成为高效的"相当大"的应用程序,请记住,Unix的理念是有关链接小工具整合在一起,和许多Unix进程短路住.
是的, unix 实用程序top报告说那些 Pascal 程序使用了那么多内存,而那些 C++ 程序使用那么多内存,这是真的。
例如,在 x64 上,当运行Free Pascal n-body 程序和C++ n-body 程序时,top报告这些测量结果——
VIRT RES SHR
608 4 0 FPC
7208 420 332 C++
Run Code Online (Sandbox Code Playgroud)
Free Pascal 程序的内存使用率最高报告是 基准测试游戏报告的 Free Pascal 程序的内存使用率。
现在看看x64 四核比较
我们可以看到两种不同的情况:
Pascal 和 C++ 程序都使用多个 MB,并且内存使用非常相似,相差不到 ~2x。当分配额外的内存来解决任务时,程序之间没有太大区别。
C++ 程序使用几百 KB,Pascal 程序使用几 KB。当没有分配额外的内存来解决任务时,Pascal 程序使用的内存会少几百 KB。
这个问题提出了两种选择,但通常还有第三种选择 -我是否误解了正在发生的事情?
C++ mandelbrot 程序可以使用比 Pascal mandelbrot 程序多 4000 倍的内存这一事实让 OP 难以置信,这对 OP 来说似乎是不可能的- 但有一个足够简单的解释,时间/空间权衡。
该C ++程序是多线程,写入到使用多芯; 但是Pascal 程序是单线程的,编写为使用单核。
Pascal 多线程 mandelbrot 程序的内存使用与 C++ 多线程程序的内存使用非常相似。