如果可以选择 fwrite() 100 1 个字节或 1 100 个字节,应该首选哪种方法?

dev*_*l05 2 c

我感兴趣的是两者之间是否存在理论速度差异

fwrite(str , 1 , 100 , fp );
Run Code Online (Sandbox Code Playgroud)

fwrite(str , 100 , 1 , fp );
Run Code Online (Sandbox Code Playgroud)

基于 glibc 中函数的编写方式、它进行的写入调用次数以及缓冲方式(忽略 gcc 上的硬件差异)。

AKX*_*AKX 7

muslglibcFreeBSD libc没有区别,因为它们都使用以下命令调用底层函数size*nmemb

穆斯勒

size_t fwrite(const void *restrict src, size_t size, size_t nmemb, FILE *restrict f)
{
    size_t k, l = size*nmemb;
    // ...
    k = __fwritex(src, l, f);
Run Code Online (Sandbox Code Playgroud)

glibc

size_t
_IO_fwrite (const void *buf, size_t size, size_t count, FILE *fp)
{
  size_t request = size * count;
  // ...
  written = _IO_sputn (fp, (const char *) buf, request);
Run Code Online (Sandbox Code Playgroud)

自由软件

    n = count * size;
    // ...
    uio.uio_resid = iov.iov_len = n;
    // ...
    if (__sfvwrite(fp, &uio) != 0)
Run Code Online (Sandbox Code Playgroud)