У меня есть эта программа:
__attribute__((section(".graph"))) __attribute__((aligned(16)))
uint16_t FLASH_BUFFER2[FLASH_SECTOR_SIZE];
int main ()
{
printf("Hallo World"\n);
}
Когда я запускаю его, он резервирует FLASH_SECTOR_SIZE * 16
байта в памяти?
Редактировать: технически правильный вопрос: «Резервирует ли он FLASH_SECTOR_SIZE * 2 * 16
байт в памяти? (2 для uint16_t
и 16 для выравнивания)»
FLASH_SECTOR_SIZE
— это 65536. Так что это должно занять всю память. Они дали мне такой код, и мне интересно то же, что и вам, если честно. - person Tasos   schedule 21.11.2018uint16_t
по кратному 16 байтам, то он может быть перемещен на 14 байт (кратное 2) от того места, где он был бы размещен без директивы выравнивания. Это не большие накладные расходы и, по-видимому, не проблема, поскольку код будет (очевидно, обычно) работать, даже если он не будет выровнен по 16-байтовым границам. Вы добавили атрибут по какой-то причине, и экономия места не была одной из причин. И нет, он не резервируетFLASH_SECTOR_SIZE * 16
байта; он резервируетFLASH_SECTOR_SIZE * 2
байта (при условии, чтоCHAR_BIT == 8
). - person Jonathan Leffler   schedule 21.11.2018_Alignas
в данном случае. - person too honest for this site   schedule 23.11.2018