我想使用处理器的自定义API修改工具链中的new
和delete
运算符。
有一些内存分配问题,所以供应商说我必须像这样修改它们。
在工具链中,我转到名为“new”的头文件
并检查了这些
void* operator new(std::size_t) throw (std::bad_alloc);
void* operator new[](std::size_t) throw (std::bad_alloc);
void operator delete(void*) throw();
void operator delete[](void*) throw();
我想做一些像使用
的事情using namespace std;
if( size == 0 )
size = 1;
while( true ){
void* pMem = my_api_malloc(size);
if( pMem )
return pMem;
}
这是正确的方法吗?
我可以在my_api_malloc
是我应该使用的那个地方进行此类更改。
这是因为处理器主要使用C并且无法识别C ++运算符。
答案 0 :(得分:0)
很抱歉由于缺乏声誉而无法在评论中写这篇文章。我认为你不应该在while循环中做malloc。如果操作系统没有更多内存可以为进程分配,无论你如何使用malloc,都是徒劳的。另请注意,free
不是new
在C ++中创建的内容,而是delete
由malloc
创建的内容。
C中的内存分配
int *a = (int*)malloc(sizeof(int)*n);
if(!a)
return 1;
和C ++
try{
int *a= new int[n];
}
catch (std::bad_alloc &e){
// ...
}