检查内存是否归零的最快方法

Lod*_*dle 4 c++ linux windows

我有一个程序,需要检查文件的大块是否归零或有数据.这个alg运行整个文件的大小达到几个演出并需要一段时间才能运行.有没有更好的方法来检查它是否归零?

平台:Linux和Windows

bool WGTController::isBlockCompleted(wgBlock* block)
{
    if (!block)
        return false;

    uint32 bufSize = (uint32)block->size;
    uint64 fileSize = UTIL::FS::UTIL_getFileSize(m_szFile);

    if (fileSize < (block->size + block->fileOffset))
        return false;

    char* buffer = new char[bufSize];

    FHANDLE fh=NULL;

    try
    {
        fh = UTIL::FS::UTIL_openFile(m_szFile, UTIL::FS::FILE_READ);
        UTIL::FS::UTIL_seekFile(fh, block->fileOffset);
        UTIL::FS::UTIL_readFile(fh, buffer, bufSize);
        UTIL::FS::UTIL_closeFile(fh);
    }
    catch (gcException &)
    {
        SAFE_DELETEA(buffer);
        UTIL::FS::UTIL_closeFile(fh);
        return false;
    }

    bool res = false;

    for (uint32 x=0; x<bufSize; x++)
    {
        if (buffer[x] != 0)
        {
            res = true;
            break;
        }
    }

    SAFE_DELETEA(buffer);
    return res;
}
Run Code Online (Sandbox Code Playgroud)

jer*_*jvl 6

一段时间多久了?...我想尝试比较尽可能多的并行值会有所帮助,也许可以使用一些SIMD指令一次比较4个以上的字节?

但请记住,无论您进行比较的速度有多快,最终仍需要从文件中读取数据.如果文件尚未位于内存中的某个高速缓存中,则在磁盘带宽饱和之前,最大可能限制为100-150 MB/s.如果您已经达到了这一点,那么您可能首先需要查看一种避免必须加载文件的方法,或者只是接受它不会比这更快的事实.