位置与关键字参数

时间:2014-05-06 12:03:16

标签: assembly compiler-construction execution

这是我老师在考试中提出的问题。我在书中和网上搜索,但我没有找到答案。我知道问题的第一部分。问题是关于编译器和汇编器。

问题: What are the advantages of using keyword parameters over positional parameters? Does it incur any overhead during the process of assembling? Does it incur any overhead during execution?

2 个答案:

答案 0 :(得分:2)

回答你的问题:

  1. 有什么好处?

    主要优点是避免在错误的位置定义错误参数的问题。例如:

    strlen(s);
    

    只有一个参数,因此没有错误的风险。但是:

    strpos(s, "needle", 34);
    

    可能是错误的,例如,s"needle"可能会被颠倒。使用命名参数:

    strpos(start_pos => 34, string => s, needle => "needle");
    

    你可以确定参数在汇编时被正确放置(因为对于汇编中的最终结果,这显然非常重要!)

  2. 装配过程中的开销?

    是。显然,您需要读取额外的数据,并且编译器必须重新排序参数。它也意味着标题必须用名称声明参数。在C中,你经常会看到这样的事情:

    strpos(const char *, const char *, int);
    

    现在,您在声明中以及何时使用函数时都有名称。还有更多要解析的标识符以及可能要分配的内存等等。

    在现代计算机上,我们的肉眼可以看到这种开销吗?可能不是。

  3. 最终的二进制文件运行速度较慢吗?

    没有。无论哪种方式,结果在最终二进制文件中都完全相同。只有一种方式比另一种方式更安全。 (即如果我们都被迫总是指定参数名称,则可以避免许多错误...但是,PHP或python等脚本运行起来会比较慢,因为每次执行时都需要重新解析这些参数脚本。)

答案 1 :(得分:-3)

调用宏时分配的参数称为关键字参数,例如

%macro test()
---
--
%mend test;
%test(l=sassuer d=admit); //Keyword parameters

虽然硬编码的一个叫做位置参数; e.g

%macro test (l=sasuser , d=admit) // Positional parameters
   ----
%mend test;