【发布时间】:2016-01-09 03:20:31
【问题描述】:
我想用处理器的自定义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++ 运算符。
【问题讨论】:
-
对不起,下次我会记住的。我将 C 标记为我的处理器支持 C 而不是 c++。
-
如果程序中有任何 C++ 代码,则需要 C++ 支持库,其中包括
new和delete运算符。您的代码片段不在函数内;它可能是某种new运算符。您尚未显示建议的替换delete运算符。这可能是一个合理的基础——如果my_api_malloc()不断地返回一个空指针会发生什么还不清楚。该标准对new操作员应该做什么有一些要求;您需要阅读并处理这些内容。 -
感谢乔纳森先生。我想在 new(std::size_t) throw (){ using namespace std; 中添加片段如果(大小 == 0)大小 = 1; while( true ){ void* pMem = my_api_malloc (size); if( pMem ) 返回 pMem;
-
我已经在
inline void* operator new(std::size_t, void* __p) throw() { my fragment }@JonathanLeffler 中替换了我的代码片段
标签: c++ memory-management new-operator delete-operator