gpt4 book ai didi

c++ - 串行分配器/释放器

转载 作者:太空狗 更新时间:2023-10-29 21:05:38 24 4
gpt4 key购买 nike

我有一个包含大量 malloc 的代码s 和特定于设备的 API malloc(我在 GPU 上编程,所以 cudaMalloc )。

基本上我的代码开头的结尾是一大堆分配调用,而我的结束部分是释放调用。

由于我已将我的全局数据封装在结构中,因此释放过程相当长,但至少我可以将它们分解成一个单独的函数。另一方面,我想要一个更短的解决方案。此外,如果我忘记在全局分配器函数中显式写入释放,自动释放器将降低内存泄漏的风险。

我想知道是否有可能编写某种模板化的类包装器,使我能够在 malloc 期间“注册”变量/cudaMalloc过程,然后在仿真结束时进行基于质量循环的解除分配(注销)。需要明确的是,我不想输入单独的释放(free/cudaFree s),因为这又很长而且不受欢迎,并且假设我注册的任何东西都不会被释放,直到设备模拟已完成,main 正在终止。

这里的一个好处是,如果我注册一个新的模拟持续时间变量,它会自动解除分配,所以我没有忘记解除分配和造成内存泄漏的危险。

这样的包装器可能吗?

你会建议这样做吗?

如果是,怎么做到的?

提前致谢!

最佳答案

一个想法:

创建两个函数,一个分配内存并在将它们注册到已分配指针的“列表”后提供有效指针。在第二种方法中,循环此列表并释放所有指针:

// ask for new allocated pointer that will be registered automatically in list of pointers.
pointer1 = allocatePointer(size, listOfPointers);
pointer2 = allocatePointer(size, listOfPointers);

...
// deallocate all pointers
deallocatePointers(listOfPointers);

甚至,您可以根据您的模拟范围使用不同的 listOfPointers:

listOfPointer1 = getNewListOfPointers();
listOfPointer2 = getNewListOfPointers();
....
p1 = allocatePointer(size, listOfPointer1);
p2 = allocatePointer(size, listOfPointer2);
...
deallocatePointers(listOfPointers1);
...
deallocatePointers(listOfPointers2);

关于c++ - 串行分配器/释放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9477656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com