Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выделение памяти в коде динамической (.so) библиотеки
|
|||
|---|---|---|---|
|
#18+
У меня возник вопрос по одному из аспектов использования динамических библиотек. Возможно, вопрос дилетантский, но вот ясности нет. Допустим, я в одном из модулей (.c-файлов) динамической библиотеки объявляю глобальную переменную, что-то вроде struct myStruct *ptr; И в коде одной из функций этого модуля пишу: if (ptr == NULL) ptr=malloc(sizeof(struct myStruct)); Теперь предположим, что некоторое приложение A, обратившись к библиотеке, выполнило это функцию и инициализировало указатель ptr. Вопрос такой: если при работающем приложении A эту же функцию выполнит приложение B, проверка указателя ptr вернет NULL или нет? Т.е. после того, как приложение A выполнило инициализацию, указатель ptr (до того, как приложение A его освободит) увидят проинициализированным все обратившиеся к данной функции приложения или каждое приложение увидит NULL и должно будет выделять память под ptr для себя? Для моей задачи очень важно, чтобы каждое приложение, работающее с библиотекой, имело СВОЮ, выделенную этой библиотекой память, именно ДЛЯ ДАННОГО приложения, а не одну память для всех. Скажите, это возможно? Может быть, такую задачу нужно решать как-то по другому? Еще раз прошу прощения за возможный дилетантизм вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2014, 10:28 |
|
||
|
Выделение памяти в коде динамической (.so) библиотеки
|
|||
|---|---|---|---|
|
#18+
EvLaUyчтобы каждое приложение, работающее с библиотекой, имело СВОЮ, выделенную этой библиотекой память, именно ДЛЯ ДАННОГО приложения, а не одну память для всех. По умолчанию так оно и есть. Каждое приложение имеет свою копию сегмента данных динамической библиотеки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2014, 11:55 |
|
||
|
Выделение памяти в коде динамической (.so) библиотеки
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, большое спасибо за ответ. Значит, для каждого вновь запущенного приложения ptr будет равен NULL. Ну да, это логично, иначе зачем нужен бы был такой механизм межпроцессного обмена как общие сегменты памяти (shmget), вот туда-то уже могут писать все работающие приложения. В принципе, у меня типичная болезнь многих программистов, наверное: хорошо алгоритмизируют, хорошо знают синтаксис языков, но "плавают" в некоторых принципиальных вопросах - как работает компьютер в целом. А без этого хорошую программу не напишешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2014, 13:03 |
|
||
|
Выделение памяти в коде динамической (.so) библиотеки
|
|||
|---|---|---|---|
|
#18+
EvLaUyхорошо алгоритмизируют, хорошо знают синтаксис языков, но "плавают" в некоторых принципиальных вопросах - как работает компьютер в целом. "Компьютер вцелом" тут ни при чём, это особенности функционирования конкретной ОС. Win16, например, имела этот сегмент данных общий и IPC на ней строилось в том числе и через глобальные переменные динамических библиотек. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2014, 13:36 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=57&tid=2019339]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 339ms |
| total: | 456ms |

| 0 / 0 |
