2014-10-24 3 views
0

Я начал с исполняемым А. Это будет реэкспортировано как статическая библиотека, которую я буду использовать в исполняемом B.Исполняемые библиотечному выделение памяти

Внутри исходного кода исполняемой AI есть:

int a[100][100]; 

, который объявлен на глобальном уровне.

Во время работы исполняемым A variable a находится в куче (как и ожидалось), а содержимое памяти окружающих это 0.

Мои вопросы следующим образом:

Где variable a собирается быть в том, когда исполняемый исполняемый файл B, который связывает и использует переменные из статической библиотеки A (сгенерирован из исполняемого файла A)?

+0

* «переменная' a' находится в куче (как и ожидалось) »* - Нет, это не так. Здесь нет кучи. –

+0

Хорошо. Где будет располагаться переменная a? – Cristina

+0

Почему бы просто не запустить A и B, и чтобы они оба печатали адрес? Чего вы пытаетесь достичь или понимать? – Useless

ответ

0
int a[100][100]; 

а, будучи глобальным, будет на глобальном пространстве, так и в отдельном адресном пространстве на исполняемый файл, поскольку они статически связаны между собой, поэтому, нет общего обмена.

0

Переменная a будет в разделе данных программы (а не куче, куче = динамической памяти).

Другими словами, a будет находиться в том же пространстве памяти, как если бы вы запускали A сами по себе, а так как это глобальная переменная, он попадет в раздел данных программы вместе с другими константами/статическими/глобальными переменные.

Когда вы статично связываете библиотеку, скомпилированный код из этой библиотеки «копируется» в новый исполняемый файл. Таким образом, вы не в ситуации, когда А представляет собой отдельный процесс от B.

У вас есть B, который использует код, написанный с А.

0

Каждый исполняемый имеет свой собственный процесс и пространство памяти. Таким образом, исполняемый файл A будет иметь вашу объявленную переменную в своем стеке, а исполняемый файл B будет иметь свою собственную копию в стеке.

Для получения дополнительной информации см. https://en.wikipedia.org/wiki/Inter-process_communication.

Смежные вопросы