namespace X
{
void* operator new (size_t);
}
Run Code Online (Sandbox Code Playgroud)
给出错误消息:
error: ‘void* X::operator new(size_t)’ may not be declared within a namespace
Run Code Online (Sandbox Code Playgroud)
这是一个gcc编译器错误吗?在较旧的gcc版本中它似乎正在工作.任何想法,为什么不允许?
使用案例:我想只允许自定义operator new/delete类,并希望禁止全局new/operator.很容易发现编译器错误,而不是链接器错误; 所以我编码:
namespace X {
void* operator new (size_t);
}
using namespace X;
Run Code Online (Sandbox Code Playgroud)
这适用于较旧版本的gcc,但不适用于新版本.
在我的项目中,我已经实现了一个自定义内存分配器,以避免cudaMalloc在应用程序"预热"后不必要的调用.此外,我使用自定义内核进行基本数组填充,数组之间的算术运算等,并希望通过使用Thrust和删除这些内核来简化我的代码.设备上的每个数组都是通过原始指针创建和访问的(现在),我想在这些对象上使用 device_vector和Thrust方法,但我发现自己在原始指针和device_ptr<>所有时间之间进行转换,这有点使我的代码混乱.
我的相当模糊的问题:如何Thrust以最可读的方式组织自定义内存管理,数组方法和调用自定义内核的用法?