Отладка в Visual Studio - могу ли я увидеть код библиотеки Intel Compiler?

0

Я использую Visual Studio 2012 с компилятором Intel C/C++ и при входе в строку, например:

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 */

это определение new() в соответствии с компилятором Intel? Как я могу видеть, как Intel внедряет стандарт C++ во время отладки через мое приложение?

Как я могу увидеть, что находится в malloc.c (в отличие от malloc.h)?

EDIT: Я думаю, что это Microsoft new(), потому что Microsoft появляется в комментариях. Почему я вижу реализацию Microsoft new(), когда я использую компилятор Intel?

Теги:
visual-studio
debugging
intel

1 ответ

0
  • Как я могу увидеть, что находится в malloc.c (в отличие от malloc.h)?
  • Одна из причин, почему вы не видите malloc.c, - это то, что функция, которую вы вызываете, определена и объявлена в malloc.h. Когда вы говорите о malloc.c и malloc.h, я думаю, вы хотите, чтобы вы хотели видеть функцию распределения памяти, которая является новой() или malloc (sizeof (5)/sizeof (int)) среди других функций.
  • Вы также можете не видеть эти файлы, потому что нет никакой ошибки в вашей функции выделения памяти или какой-либо другой функции, которая косвенно использует функцию распределения памяти. Если ошибка не существует, компилятор не укажет на вас, что ошибка, которую вы получаете, поступает из malloc.c или malloc.h.
  • Компилятор укажет пальцем на класс или файл, который генерирует ошибку. Если у вас есть функция, которая нарушает функции malloc.c или malloc.h, вы можете не видеть эти файлы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню