ARM G CC C ++ 14 POD-типы не помещаются в ПЗУ - PullRequest
0 голосов
/ 22 марта 2020

Я экспериментировал с двоичными файлами, сгенерированными с помощью компилятора ARM G CC (версия 9.2.1). Я заметил, что даже если я скомпилировал программу с поддержкой C ++ 14, мягкие правила для типов POD не используются для помещения определения структуры в раздел rodata.

Например:

struct DigitalOut 
{
   uint32_t port;
   uint32_t pin;
   uin32_t output_type;
   uint32_t output_speed;
}

Эта версия помещается в секцию rodata, если она создается с использованием инициализаторов скобок.

Однако, если я введу конструктор speci c для структуры, как показано ниже, то она не будет помещена в секцию rodata

struct DigitalOut 
{

   DigitalOut() = default;

   DigitalOut(uint32_t port, uint32_t pin) : 
   port{port},
   pin{pin},
   output_type{500}  //just an example
   output_speed{400} {}

   uint32_t port;
   uint32_t pin;
   uin32_t output_type;
   uint32_t output_speed;
}

Что мне здесь не хватает? Я почти уверен, что понимаю обновленное определение C ++ для типов POD, тривиально конструируемых и копируемых классов и стандартных макетов.

Ссылка на ответ, относящийся к обновленным определенным типам POD

Редактировать:

Мой вопрос касается того, почему компилятор не может этого сделать? Может ли это быть отсутствующей функцией в компиляторе или я что-то не так делаю?

...