printf("foo: ");
对
fputs("foo: ", stdout);
正如标题中提到的,该字符串没有格式化,也没有以新行结尾(因此没有 put)。我不确定开销和优化,那么这种情况下的经验法则是什么?
如标题所述,字符串没有格式化,不 以新行结束(因此没有 put)。我不确定管理费用和 优化,那么这种情况的经验法则是什么?
printf
是一个比 fputs
复杂得多的函数。但通常情况下,使用 I/O 功能时,处理器时间并不是主要瓶颈。但是如果您使用
fprintf
而不是 printf
,大多数现代编译器会将您的 fprintf
优化为 fwrite
。
void foo(void)
{
fprintf(stdout, "Hello World");
}
void bar(void)
{
printf("Hello World");
}
void zoo(void)
{
fputs("Hello World ", stdout);
}
以及生成的代码:
.LC0:
.string "Hello World"
foo:
mov edx, 11
mov esi, 1
mov edi, OFFSET FLAT:.LC0
mov rcx, QWORD PTR stdout[rip]
jmp fwrite
bar:
mov edi, OFFSET FLAT:.LC0
xor eax, eax
jmp printf
.LC1:
.string "Hello World "
zoo:
mov edx, 12
mov esi, 1
mov edi, OFFSET FLAT:.LC1
mov rcx, QWORD PTR stdout[rip]
jmp fwrite