这是我老师在考试中提出的问题。我在书中和网上搜索,但我没有找到答案。我知道问题的第一部分。问题是关于编译器和汇编器。
问题:
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?
答案 0 :(得分:2)
回答你的问题:
有什么好处?
主要优点是避免在错误的位置定义错误参数的问题。例如:
strlen(s);
只有一个参数,因此没有错误的风险。但是:
strpos(s, "needle", 34);
可能是错误的,例如,s
和"needle"
可能会被颠倒。使用命名参数:
strpos(start_pos => 34, string => s, needle => "needle");
你可以确定参数在汇编时被正确放置(因为对于汇编中的最终结果,这显然非常重要!)
装配过程中的开销?
是。显然,您需要读取额外的数据,并且编译器必须重新排序参数。它也意味着标题必须用名称声明参数。在C中,你经常会看到这样的事情:
strpos(const char *, const char *, int);
现在,您在声明中以及何时使用函数时都有名称。还有更多要解析的标识符以及可能要分配的内存等等。
在现代计算机上,我们的肉眼可以看到这种开销吗?可能不是。
最终的二进制文件运行速度较慢吗?
没有。无论哪种方式,结果在最终二进制文件中都完全相同。只有一种方式比另一种方式更安全。 (即如果我们都被迫总是指定参数名称,则可以避免许多错误...但是,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;