Страница 1 из 1

getmem в библиотеке и вне

СообщениеДобавлено: 22.09.2014 19:35:38
ger0strat
Доброго времени суток.
Честно говоря вопрос можно решить тестом, но хочется более подробного ответа.
Понятно, что библиотека и сама программа имеют отдельные менеджеры памяти. Понятно, что если выделить память в библиотеке, то освободить можно только там же. Не понятно, почему что-то типа этого:
Код: Выделить всё
function foo_getmem(n:integer):pointer;cdecl;export;
begin
  result:=getmem(n);
end;

находящееся внутри библиотеки, вызванное извне, выделит библиотечную память?
Тогда получается, что fpc прилинковывает этот самый менеджер и все getmem'ы направляет на него. Тогда можно ли его заставить не прилинковывать, а память будет выделяться в программе функцией типа вышеприведенной? (расшаривать блоки данных в моей задаче не надо)

А если это выделит все-таки память программы, то в каком случае тогда может быть использована библиотечная (кроме вызовов из initialization).

Если ахинею несу, пардоньте, уже голова не работает.

Re: getmem в библиотеке и вне

СообщениеДобавлено: 22.09.2014 20:36:30
zub
Код: Выделить всё
uses cmem, ... ;

и в exe и в dll - поставит общий менеджер памяти

>>Не понятно, почему что-то типа этого:
>>находящееся внутри библиотеки, вызванное извне, выделит библиотечную память?
Что непонятного? foo_getmem откуда бы небыл вызван выделит библиотечную память, т.к. внутри его "вкомпилирован" вызов библиотечного менеджера памяти

Re: getmem в библиотеке и вне

СообщениеДобавлено: 23.09.2014 10:59:40
ger0strat
Меня переклинило на том, что getmem'ы одинаковые. Гугление по подстановке менеджера памяти как в cmem привело к идеальному варианту http://www.freepascal.ru/article/freepascal/20050522025034