序言:假设我有以下C ++程序:
int main()
{
int *p1 = new int;
int *p2 = new int;
}
事实证明,从发射到发射,p1和p2将具有相同的值,并且p1< P2
现在问题是:我有一个在堆上有多个内存分配的大型程序。事实证明,具有相当高的稳定性,指向分配的内存批量的指针将具有从启动到启动的相同值,因此,它们的排序也将被保留。但我希望指针不要保持从发布到发布的价值和排序。如何通过对现有代码的最小更改来实现此行为?
也许,问题可以通过不改变代码来解决,但可以通过编写一些附件程序来解决。我考虑启动另一个可以执行频繁内存分配/解除分配的进程,但是不同的进程不共享地址空间,所以它似乎没有帮助。
答案 0 :(得分:2)
在程序启动时,将一堆指针分配给随机长度块,然后以随机顺序分配delete
它们中的一些随机部分。
答案 1 :(得分:1)
我认为你想对你的程序进行某种压力测试。使用执行频繁内存分配和解除分配的进程的方法会使您走上正确的路径,除了分配需要在与运行进程相同的地址空间中完成,即它应该是一个单独的线程,而不是一个单独的进程。 / p>
编写一个在启动时启动的线程,并根据请求退出。线程应随机分配和取消分配随机大小的内存块,并保留它在列表中分配的块。线程应该不时地唤醒,从列表中选择N个随机块,然后释放它们。然后它应该分配N个随机块,将它们放在列表中,然后再回去睡觉。
当请求线程关闭时,线程应释放其所有内存块,然后退出。
你的main()
应该在启动时启动线程,并运行程序的“payload”部分。一旦完成,main
应该向线程发出它应该退出的信号,并向线程发出join
以便让它完成其解除分配。即使你不再需要线程所拥有的内存,也应允许它运行完成,以免干扰内存分析工具,例如valgrind。