Параметры и результат в библиотеках .so

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Параметры и результат в библиотеках .so

Сообщение dionic » 22.06.2012 20:55:06

Добрый день, народ.

Поискал тут на форуме инфу про использование библиотек под Unix системами и немного сам потестил некоторые возможности, но что-то никак не могу понять как правильно работать с библиотеками. Вопросы следующего плана:

1. Можно ли из библиотечной функции вернуть ну либо указатель на какой-либо объект или сам объект и чтобы не было утечек памяти.
2. Будут ли утечки памяти если возвращать PChar и не использовать модуль cmem.

По первому вопросу, я создавал объект TLIst в функции библиотеки и возвращал указатель на него в программу, после чего уничтожал его, однако уверенности в том, что память тоже освобождается у меня нет.
dionic
новенький
 
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08

Re: Параметры и результат в библиотеках .so

Сообщение iskander » 23.06.2012 13:20:47

А сюда заглядывали?
http://www.gunsmoker.ru/2009/01/blog-post.html
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: Параметры и результат в библиотеках .so

Сообщение dionic » 24.06.2012 11:07:38

Iskander, спасибо за ссылочку. Интересная статья, её не встречал, очень познавательная. Есть ещё вот такая http://freepascal.ru/article/freepascal/20050522025034. Из них можно много что подчеркнуть интересного. Однако там в основном, не знаю по каким причинам при приведении примеров в качестве параметров и возвращаемого результата используют строки ну или максимум динамические массивы. Данные конструкции освобождаются сами, ну то есть менеджером памяти при обнулении ссылок.

Что касается статьи gunsmoker, то там всё же написано про dephi. Так модуля sharedmem под Unix в Lazarus нету. Есть другой cmem. Однако его использование почему то у меня вызывает какие-то непонятные ошибки ещё на этапе компиляции.
dionic
новенький
 
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08

Re: Параметры и результат в библиотеках .so

Сообщение iskander » 24.06.2012 13:54:40

dionic писал(а):Однако там в основном, не знаю по каким причинам при приведении примеров в качестве параметров и возвращаемого результата используют строки ну или максимум динамические массивы.

При отсутствии общего менеджера памяти с ними проблема.
dionic писал(а):Есть другой cmem. Однако его использование почему то у меня вызывает какие-то непонятные ошибки ещё на этапе компиляции.

В Windows полёт нормальный, cmem должен быть первым в uses и библиотеки, и приложения, использующего эту библиотеку.
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: Параметры и результат в библиотеках .so

Сообщение dionic » 24.06.2012 17:53:48

Вообще не заметил проблемы при отсутствии общего менеджера памяти под Unix при возвращении из библиотечной функции PChar. Создал тестовый проект, в котором создаются потоки и вызывают библиотечную функцию, которая возвращает PChar длинной, ну например, 100000 символов, после чего поток умирает. Потоков создавалось достаточно много создавалось достаточно много 5000-10000 тысяч, но большого прироста использования памяти приложением, после уничтожения всех потоков я не наблюдал. Хотя замерял я это так сказать на глаз, по менеджеру процессов. Для чистоты эксперимента нужно, конечно, либо увеличить на порядок количество созданных потоков, ну или найти способ точно измерить используемую память приложением до и после жизни потоков. Под Unix я просто не знаю таких системных методов, которым можно сделать данные замеры.

А что касается Windows, то использование cmem меня там не интересует, я же всё твержу про Unix.
dionic
новенький
 
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08

Re: Параметры и результат в библиотеках .so

Сообщение iskander » 24.06.2012 20:22:33

dionic писал(а):способ точно измерить используемую память приложением до и после жизни потоков.

Если будут утечки памяти, то в библиотеке, а не в приложении. Попробуйте использовать модуль heaptrc.
Что-нибудь вроде
Код: Выделить всё
library Mylib;
  ...
uses
  heaptrc,
  ...;

  ...
  ...
begin
  SetHeapTraceOutput('путь_к_логу_HeapTrace');
end.
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: Параметры и результат в библиотеках .so

Сообщение dionic » 25.06.2012 08:10:24

iskander, спасибо за подсказку по модулю! Это то что нужно, теперь можно посмотреть какие есть утечки памяти.
dionic
новенький
 
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

Рейтинг@Mail.ru