Есть ли в GCC способ программно запросить, в каком разделе будет храниться переменная?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Есть ли в GCC способ программно запросить, в каком разделе будет храниться переменная?

Сообщение Anonymous »

Я работаю с кодом, предназначенным для необычной встроенной системы, которая требует отдельных инструкций процессора для чтения из ее постоянной памяти.
Чтобы переменные помещались в указанную память для чтения, только в памяти, они должны быть помечены атрибутом, который помещает их в назначенный раздел, содержимое которого будет помещено в постоянную память.
Было бы полезно иметь возможность программно определять, какие раздел, в котором хранится переменная, чтобы я мог определить во время компиляции, какие переменные будут храниться в ОЗУ (и, следовательно, могут использовать обычное разыменование указателя и чтение ссылок), а какие переменные будут храниться в ПЗУ (и, следовательно, потребуют специального кода доступа, написанного на ассемблере).
Имея доступ к такой функции, я мог бы сделать что-то вроде:

Код: Выделить всё

template
struct data_pointer
{
Type * pointer;

data_pointer(Type * pointer, bool) :
pointer { pointer } {}

// Non-const data cannot be readonly
Type & operator *()
{
return *pointer;
}
};

template
struct data_pointer
{
const Type * pointer;
bool is_readonly;

data_pointer(const Type * pointer, bool is_readonly) :
pointer { pointer },
is_readonly { is_readonly }
{}

// Const data might be in RAM or ROM
const Type operator *()
{
return (is_readonly ? *pointer : readonly_dereference(pointer));
}
};

#define make_data_pointer(object) \
(data_pointer(&object, is_in_readonly_section(object)))
Где:
  • Код: Выделить всё

    readonly_dereference
    — это механизм, с помощью которого считывается указатель на значение в области памяти только для чтения.
  • Код: Выделить всё

    is_in_readonly_section(object)
    — это гипотетический предикат времени компиляции, который необходим для обеспечения бесперебойной работы механизма.
Есть ли в GCC что-нибудь подобное? гипотетический предикат is_in_readonly_section во время компиляции, или мне не повезло?
Я мог бы обойтись и без него, но его отсутствие означает, что конечный пользователь будет ответственность за обеспечение того, чтобы их data_pointer указывают на правильный тип памяти, что может оказаться гораздо более подверженным ошибкам сценарием, чем если бы компилятор мог нести это бремя.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ble-will-b
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»