Можно ли выделить один и тот же адрес для двух разных глобальных переменных в C? - PullRequest
0 голосов
/ 18 марта 2020

Можно ли выделить один и тот же адрес для двух разных глобальных переменных в C в одной сборке? Я пробовал несколько способов с помощью компоновщика, но мне не удалось. Если это не разрешено, может кто-нибудь объяснить, почему? И если это разрешено, как это сделать.

Изменить 1

Например, в {file1.c} у меня есть глобальная переменная {int a} и в {file2.c} У меня есть глобальная переменная {int b}. Можно ли связать их по одному адресу? Я не буду приводить здесь детали, потому что я уже проанализировал другие варианты достижения этой цели. Цель этих вопросов - узнать, возможно ли такое же связывание памяти.

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Если вы используете binutils ld, вы можете использовать overlays https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_22.html

Я использую его очень часто сам.

0 голосов
/ 29 марта 2020

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

Так в моем примере выше:

file1.c
int __attribute__((section (".config_value"))) a = 10;

file2.h
extern int b;

linker.ld (in the section you want to dump)
PROVIDE(b = . );
file1.o(.config_value)

И затем переменная b in file2.c также имеет значение 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...