Intel C/C++ コンパイラで Visual Studio 2012 を使用しており、次のような行にステップインすると:
x = new X();
次に、次のようなコードが表示されます。
#ifdef _SYSCRT
#include <cruntime.h>
#include <crtdbg.h>
#include <malloc.h>
#include <new.h>
#include <stdlib.h>
#include <winheap.h>
#include <rtcsup.h>
#include <internal.h>
void * operator new( size_t cb )
{
void *res;
for (;;) {
// allocate memory block
res = _heap_alloc(cb);
// if successful allocation, return pointer to memory
if (res)
break;
// call installed new handler
if (!_callnewh(cb))
break;
// new handler was successful -- try to allocate again
}
RTCCALLBACK(_RTC_Allocate_hook, (res, cb, 0));
return res;
}
#else /* _SYSCRT */
#include <cstdlib>
#include <new>
_C_LIB_DECL
int __cdecl _callnewh(size_t size) _THROW1(_STD bad_alloc);
_END_C_LIB_DECL
void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
{ // try to allocate size bytes
void *p;
while ((p = malloc(size)) == 0)
if (_callnewh(size) == 0)
{ // report no memory
_THROW_NCEE(_XSTD bad_alloc, );
}
return (p);
}
#endif /* _SYSCRT */
これは Intel コンパイラによる new() の定義ですか? のように、アプリを介してデバッグ中に Intel が C++ 標準を実装する方法を確認できますか?
(malloc.h ではなく) malloc.c の内容を確認するにはどうすればよいですか?
編集: Microsoft がコメントに表示されるため、これは Microsoft new() だと思います。Intel コンパイラを使用しているときに Microsoft による new() の実装が表示されるのはなぜですか?