我知道要调用外部程序can,但我不知道它与调用子程序相比有多贵。通过调用的成本,我的意思是启动程序的开销,而不是执行程序代码本身的成本。我知道成本可能会因使用的语言和操作系统以及其他因素而有很大差异,但我会赞赏一些球场估计。
我要求看到通过使流程修改其他流程而不允许代码自我修改的语言模拟代码自我修改的合理性
答案 0 :(得分:3)
就像我在my comment above中所说的那样,如果您只是尝试并做了一些基准测试,那也许是最好的。我希望这主要取决于你正在使用的操作系统。
话虽这么说,开始一个新的过程通常比调用一个子程序强很多几个数量级(我很想说“至少慢一百万倍”,但我不能用任何测量来支持这样的声明。
启动流程的可能原因要慢得多:
磁盘I / O(操作系统必须将过程映像文件加载到内存中) - 这将是一个很重要的因素,因为I / O比简单的CPU跳转/调用指令慢很多个数量级
为了让您大致了解所涉及的数量级,让我引用this 2011 blog article(关于内存访问与硬盘访问,而不是CPU跳转指令与硬盘访问):
“磁盘延迟约为13毫秒,但这取决于硬盘的质量和转速.RAM延迟约为83纳秒。差异有多大?如果RAM是F-18大黄蜂的最高时速为1,190英里/小时(超过声速的1.5倍),磁盘访问速度是一个香蕉段,最高时速为0.007英里/小时。“
你做数学。
内存分配&其他内核数据结构
等
显然,以上所有要点意味着您的操作系统可能会执行大量内部子程序调用以启动新进程,因此只需要执行一个子程序调用,而不是让操作系统执行数百个操作其中一定比较便宜。