Добрый день
У меня правая рука Mac и левая (довольно хилая
) Вындоуз. Так что я буду говорить только о том что я лично проверял на Mac. Пришлось переделывать несколько старых плагинов, которые использовали такую технику:
- получить размер максимального свободного блока памяти
- распределить этот блок
- внутри него использовать свою кучу (heap)
- по окончанию перераспределить память с помощью realloc (например выделили 500Mb а оказалось что нужно 2Mb)
Такой подход с треском проваливается ввиду:
- не существует больше понятия "максимального свободный блок памяти" - вся память виртуальна и непрерывна
- OS правильно говорит сколько памяти свободно, но попытки выделить блок больше 1Gb возвращают NULL. (в 32-bits и в 64-bits без разницы). Хотя я могу выделить, напрмер, 4 блока по 500Mb. Нашел способ обойти это (vm_allocate) но это глухой нативняк и работать с ним неудобно.
- realloc НЕ работает вообще, блок памяти он обрезает но все равно он недоступен для следующих распределений. После "гугления" узнал что это, мол, стандарт для Darwin систем. Кто там из них Дарвин - для меня без разницы, OSX я держать должен.
Вопрос(ы): пацаны, что слышно на других платформах?