如何创建比标准printf和scanf更快的C I/O函数?

如何创建比标准printf和scanf更快的C I/O函数?,c,C,我发现许多极客程序员正在用C语言为输入和输出创建自己的函数,以减少运行时间。但在理解他们的代码方面,我面临着一个非常困难的时期 那么,你能解释一下如何用简单明了的英语创建如此快速的IO函数吗 提前谢谢 为了在Windows上最大限度地发挥控制台I/O的性能,您需要在Linux上使用,标准的C函数read和write将是最有效的 现在,如果要使用格式字符串,必须创建格式解析器和求值器。如果您有各种各样的函数,如直接在代码中调用的print\u int(int),print\u string(con

我发现许多极客程序员正在用C语言为输入和输出创建自己的函数,以减少运行时间。但在理解他们的代码方面,我面临着一个非常困难的时期

那么,你能解释一下如何用简单明了的英语创建如此快速的IO函数吗


提前谢谢

为了在Windows上最大限度地发挥控制台I/O的性能,您需要在Linux上使用,标准的C函数
read
write
将是最有效的

现在,如果要使用格式字符串,必须创建格式解析器和求值器。如果您有各种各样的函数,如直接在代码中调用的
print\u int(int)
print\u string(const char*)
,您可以看到Linux上的一些小的性能改进。在Windows上,如果使用控制台缓冲区管理系统调用,您可以看到一些巨大的改进


不过,在大多数情况下,stdarg处理将占用
printf
系列的大部分处理时间,而更大的处理时间将被写入控制台缓冲区的实际操作所消耗。如果您真的需要每秒输出兆字节的
printf
s,请将其路由到一个文件。如果您这样做,
printf
操作实际上是免费的,此时磁盘I/O将成为瓶颈。

为了在Windows上最大限度地提高控制台I/O的性能,您需要在Linux上使用,标准的C函数
读取
写入
将是最有效的

现在,如果要使用格式字符串,必须创建格式解析器和求值器。如果您有各种各样的函数,如直接在代码中调用的
print\u int(int)
print\u string(const char*)
,您可以看到Linux上的一些小的性能改进。在Windows上,如果使用控制台缓冲区管理系统调用,您可以看到一些巨大的改进


不过,在大多数情况下,stdarg处理将占用
printf
系列的大部分处理时间,而更大的处理时间将被写入控制台缓冲区的实际操作所消耗。如果您真的需要每秒输出兆字节的
printf
s,请将其路由到一个文件。如果您这样做,
printf
操作实际上是免费的,此时磁盘I/O将成为瓶颈。

对于单线程代码,您可以使用
stdio.h
库中的
getchar\u unlocked()
putchar\u unlocked()
函数快速获得I/O。下面是一个简单的示例,说明如何使用此函数

#include <stdio.h>
int main( )
{
    char c = getchar_unlocked( );
    printf( "%c" , c );
    return 0;
}
#包括
int main()
{
char c=getchar_unlocked();
printf(“%c”,c);
返回0;
}

但请记住,它不是线程安全的。所以要小心使用。

对于单线程代码,可以使用
stdio.h
库中的
getchar\u unlocked()
putchar\u unlocked()
函数快速获取I/O。下面是一个简单的示例,说明如何使用此函数

#include <stdio.h>
int main( )
{
    char c = getchar_unlocked( );
    printf( "%c" , c );
    return 0;
}
#包括
int main()
{
char c=getchar_unlocked();
printf(“%c”,c);
返回0;
}

但请记住,它不是线程安全的。因此,请谨慎使用。

您不能用简单明了的英语编写快速IO函数。你需要使用一种编程语言。请看写(2)和读(2)在不知道他们做了什么的情况下,我们如何解释他们是如何做的?printf/scanf是具有大量功能的高级函数,只要不需要相同的功能,使用实现它们的较简单的低级函数始终可以实现更高的性能。但即使这样,如果您希望为特定的硬件接口进行I/O,原则上也可以绕过操作系统和设备驱动程序层,并可能获得最佳性能。但是谁知道你想要的界面是什么呢?@JamesMcNellis好的,如果不是简单明了的英语,那么编程语言会很有帮助。请举例说明这种把戏。塞纳克斯@user3606997请举例说明printf“慢”的情况,然后也许有人可以建议一种“快”的方法来完成您尝试执行的任何操作。您不能用简单明了的英语编写快速IO函数。你需要使用一种编程语言。请看写(2)和读(2)在不知道他们做了什么的情况下,我们如何解释他们是如何做的?printf/scanf是具有大量功能的高级函数,只要不需要相同的功能,使用实现它们的较简单的低级函数始终可以实现更高的性能。但即使这样,如果您希望为特定的硬件接口进行I/O,原则上也可以绕过操作系统和设备驱动程序层,并可能获得最佳性能。但是谁知道你想要的界面是什么呢?@JamesMcNellis好的,如果不是简单明了的英语,那么编程语言会很有帮助。请举例说明这种把戏。塞纳克斯@user3606997请举例说明printf“慢”的情况,然后也许有人可以建议一种“快”的方法来做你想做的事情。这正是我想要的。谢谢请注意,这些POSIX函数不是C标准库的一部分。@JamesMcNellis ya,我知道这一点,但我猜这就是她真正提到的。这正是我想要的。谢谢请注意,这些POSIX函数不是C标准库的一部分。@JamesMcNellis ya,我知道这一点,但我猜这就是她真正提到的。