我有一个系统,其中有许多线程正在 Linux 系统上被激活。每个线程分配一个特定大小的缓冲区,当该缓冲区已满时将其写入文件。每个线程都有自己的缓冲区并将缓冲区写入不同的文件。我发现当我将缓冲区大小设置为相对较大(1M 大小或更大)时,我开始遭受内存泄漏的困扰。然而,当缓冲区很小时——大约 1K 或更少——我没有这些内存泄漏。
任何人都知道它的原因是什么?更重要的是我该如何克服这个问题?使用较小的缓冲区会极大地影响我的系统性能。
写入缓冲区 - else if(m_bUseBuffer) { //数据缓冲区现在已满 if (m_nBufferSize+pi_nDataLength >= cMaxSizeQLoaderFileBuffer) { hRes = WriteDataToFile(); }
if (SUCCEEDED(hRes))
{
if (m_nBufferSize+pi_nDataLength <= cMaxSizeQLoaderFileBuffer)
{
memcpy(m_sBuffer+m_nBufferSize,pi_pData,pi_nDataLength);
m_nBufferSize += pi_nDataLength;
m_nBufferLinesCounter++;
//need to write buffer to file otherwise next time we write the file will be too large.
if (m_nBufferLinesCounter + m_nQLoaderFileLinesCounter >= m_nQLoaderFileMaxLines)
{
hRes = WriteDataToFile();
}
}
将缓冲区写入文件-
hRes = OpenFile();
if (SUCCEEDED(hRes))
{
m_fQLoaderFile.write(m_sBuffer,m_nBufferSize);
m_fQLoaderFile.flush();
m_nBufferSize = 0;
m_nQLoaderFileLinesCounter += m_nBufferLinesCounter;
m_nBufferLinesCounter = 0;
}
何时来自 type-std::ofstream