The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Доступна библиотека декодирования изображений SAIL"
Отправлено Аноним, 17-Июл-20 12:08 
Большинство известных мне реализаций new в С++ вызывают внутри себя malloc (GCC/Clang/MSVC). В случае MSVC malloc вызывает HeapAlloc или VirtualAlloc из kernel32. Чтобы избавиться от вызова «стандартного» malloc я компиляю (вернее линкую, но не суть) с nodefaultlib/nostdlib/nolibc и делаю свою реализацю malloc/free, как правило из заранее выделенного буфера на старте программы.  Это имеет свои недостатки, например приходится самому изобретать termination handler при вызове pure virtual функции-члена или изобретать каст из float/double в int (зачем-то подобные вещи впихнуты в crt и чтобы от него избавиться приходится изобретать велосипеды, хотя самописный каст из float в int работает бысрее).

eastl внутри себя вызывает «собственную» реализацию глобального оператора new [], т.е. ты условно всегда должен определить при использовании что-то подобное:  

void* operator new[](size_t size, const char* name, int flags, unsigned debug_flags, const char* file, int line)
{
    return ::operator new[](size);
}

void* operator new[](size_t size, size_t alignment, size_t alignment_offset, const char* name, int flags, unsigned debug_flags, const char* file, int line)
{
    return ::operator new[](size);
}

Т.е. если ты внутри своей библиотеки используешь new, ты можешь пользоваться своей реализацией оператора, и поставлять что-то подобное при компиляции по «умолчанию» при соответствующем флаге в CMake. Если пользователь захочет заменить, флаг ему в руки, пусть только переопределит твой глобальный new. Если ты не используешь нигде new, то черт с ним, макросов/стабов для alloc/free вполне хватит.  

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру