使用我的API修改new运算符

时间:2016-01-09 03:20:31

标签: c++ memory-management new-operator delete-operator

我想使用处理器的自定义API修改工具链中的newdelete运算符。 有一些内存分配问题,所以供应商说我必须像这样修改它们。 在工具链中,我转到名为“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 ++运算符。

1 个答案:

答案 0 :(得分:0)

很抱歉由于缺乏声誉而无法在评论中写这篇文章。我认为你不应该在while循环中做malloc。如果操作系统没有更多内存可以为进程分配,无论你如何使用malloc,都是徒劳的。另请注意,free不是new在C ++中创建的内容,而是deletemalloc创建的内容。

C中的内存分配

int *a = (int*)malloc(sizeof(int)*n);
if(!a)
  return 1;

和C ++

try{
  int *a= new int[n];
}
catch (std::bad_alloc &e){
  // ...
}