标准库 vs Windows API 速度

Standard Library vs Windows API Speed

我的问题是如果我想从我的程序中获得最大速度,我是否应该使用 Windows API,我可以在其中使用标准库函数.

我假设每次通话的答案都不一致;具体来说,我很好奇 stat() vs dwFileAttributes,如果我想弄清楚一个文件是否是一个目录(假设 file_name 是一个包含文件完整路径的字符串):

WIN32_FIND_DATA fileData;
HANDLE          hSearch;

hSearch = FindFirstFile(TEXT(file_name), &fileData);

int isDir = fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY

对比

struct stat info;
stat(file_name, &info);

int isDir = S_ISDIR(info.st_mode);

如果有人知道,或者可以详细说明这些库之间的速度差异(如果有的话),我将不胜感激。

不是关于速度的答案,而是@The Corn Inspector,MSVC CRT 代码是开源的。如果您查看旧版本(在 .net 和常见的 UCRT 之前),并查看 stat() 函数,它确实是相同 OS 调用的包装器。

int __cdecl _tstat (
        REG1 const _TSCHAR *name,
        REG2 struct _stat *buf
        )
{  // stuff omitted for clarity
        _TSCHAR *  path;
        _TSCHAR    pathbuf[ _MAX_PATH ];
        int drive;          /* A: = 1, B: = 2, etc. */
        HANDLE findhandle;
        WIN32_FIND_DATA findbuf;

        /* Call Find Match File */
        findhandle = FindFirstFile((_TSCHAR *)name, &findbuf);

当然还有映射结构等的额外代码,貌似也做了一些时间转换:

 SYSTEMTIME SystemTime;
            FILETIME LocalFTime;

            if ( !FileTimeToLocalFileTime( &findbuf.ftLastWriteTime,
                                           &LocalFTime )            ||
                 !FileTimeToSystemTime( &LocalFTime, &SystemTime ) )
            {

所以从理论上讲,它可能会更慢,但可能微不足道,以至于在一个完整、复杂的程序的上下文中没有实际区别。如果您调用 stat() 一百万次,并且担心毫秒数,谁知道呢。剖析它。