Добрый день,
Я работал над распределением памяти для портативного использования.
У меня есть файл заголовка, который содержит прототипы функций и перегрузки операторов для новых и удаленных.
void* mem_align16(size_t size);
void mem_delete16(void* memory);
Затем у меня есть файлы cpp для каждой реализации операционной системы. например sbrk для Linux и HeapAlloc для Windows.
при работе с окнами я должен использовать дескриптор для выделения памяти.
HANDLE heap_handle = HeapCreate(0, 0, 0);
Как мне использовать ручку аккуратно и аккуратно? Поскольку дескриптор необходимо использовать при запуске внутри main. Единственный способ, которым я могу думать об использовании дескриптора, - это использовать его как статическую переменную внутри файла cpp, где используются функции, а затем использовать функцию для обновления статической переменной, а затем объявить ее вперед внутри main.cpp
//inside of win32_heap.cpp
static HANDLE heaphandle = 0;
void make_heap_handle(void) {
heaphandle = HeapCreate(0, 0, 0);
}
//inside of win32_main.cpp
void make_heap_handle(void);
int main(int argc, char** argv) {
make_heap_handle();
return (0);
}
По какой-то причине это кажется неправильным, чтобы получить удобный дескриптор для использования с моими функциями.
HANDLE
зависит от системы, требовать, чтобы он был доступенmain()
, вряд ли переносимо. Организуйте свой код так, чтобы такие детали не были доступны за пределами ваших функций. Кроме того, ваш вопрос неясен. (Согласитесь также с комментарием Нила Баттерворта - нет смысла использовать собственное управление памятью, если вы ищете портативное решение). - person Peter   schedule 26.05.2018HANDLE
не подвергается воздействиюmain()
, не так ли? Толькоmake_heap_handle()
, и для этого просто нужно более разумное имя, например (скажем)init_memory_manager()
. - person Paul Sanders   schedule 26.05.2018