Algorithm 分配最大可用内存
我目前正在尝试编写一个程序,该程序应该分配最大可用内存。我找到了一个解决方案,它限制潜在可用内存的面积,直到两个边界相等为止(见清单)Algorithm 分配最大可用内存,algorithm,memory,memory-leaks,malloc,Algorithm,Memory,Memory Leaks,Malloc,我目前正在尝试编写一个程序,该程序应该分配最大可用内存。我找到了一个解决方案,它限制潜在可用内存的面积,直到两个边界相等为止(见清单) void enforceMemoryLeakage(void**arrayOfAllocMemory) { 无符号整数maxMemory=0x8000000; 无符号整数最小内存=0x50000000; unsigned int attemplocatedmemory=minMemory+(maxMemory-minMemory)/2; 空虚的记忆; 而((最大
void enforceMemoryLeakage(void**arrayOfAllocMemory)
{
无符号整数maxMemory=0x8000000;
无符号整数最小内存=0x50000000;
unsigned int attemplocatedmemory=minMemory+(maxMemory-minMemory)/2;
空虚的记忆;
而((最大内存-最小内存)>1)
{
pAllocMemory=malloc(attempAllocatedMemory);
if(pAllocMemory!=NULL)
{
minMemory=attemplocatedmemory;
attemplocatedmemory+=(maxMemory-minMemory)/2;
自由(帕洛克记忆);
}
其他的
{
maxMemory=AttemplocatedMemory;
attemplocatedmemory=minMemory+(maxMemory-minMemory)/2;
}
}
arrayOfAllocMemory[0]=malloc(maxMemory);
void*pAllocAdditionalMemory=malloc(100);
if(pAllocAdditionalMemory==NULL)
std::cout您没有指定操作系统或平台,所以我在这里完全猜测,所以请带着极大的偏见阅读
假设您的二进制搜索代码中没有bug…我打赌您将面临内存碎片问题,因为您在执行过程中成功分配/释放内存,其他进程也可以这样做,因此您可能会碎片化内存。示例:
操作系统有2M字节的连续可用内存块
分配1.5兆字节的内存(0.5兆字节
free)
其他一些进程分配1kbyte(0.499mbyte
free)
释放1兆字节(1.0+0.499兆字节
释放两个片段)
并尝试分配1.25兆字节
但是操作系统在单个连续块中没有1.25内存,所以它失败了,因此您需要再次分配1兆字节(0.499兆字节
free)
您成功地分配了1kbyte(0.498mbyte
free)
根据操作系统的内存管理策略,有时甚至不需要另一个进程来分割内存
然而,还有另一种与碎片无关的可能性。在模拟或WOW64的情况下,操作系统将不会分配整个可用RAM,并且对单个连续块大小也有限制。例如,Win32将不允许超过~1.25 GB,但这并不意味着只有1.25 GB的可用RAM…I'm r非常感谢您的详细回答。为了完整起见,我想提及我正在开发一个Windows x86应用程序。我最初的意图是强制执行以下测试所需的内存泄漏。但是,只有在没有更多可用内存的情况下,此测试才会成功。是否有其他简单的方法强制执行内存泄漏通过malloc命令请求额外字节并返回空指针,从而导致内存泄漏?@RatbaldMeyer内存泄漏正在重复(在循环/事件/线程中)of:分配内存而不释放内存,这会随着时间的推移而减少可用内存,直到没有剩余可用RAM…因此,只需在某个线程循环中分配100字节,并使用一些睡眠或计时器,这将随着时间的推移而稳定地减少可用内存…顺便说一句,在Windows上有:但很难说在WOW64的情况下它是如何工作的(64位操作系统上的32位应用程序)