Я программирования для встраиваемых, с ограниченными ресурсами устройств в C.Структуры, внутренние структуры и размера в C
У меня есть структура, как это:
typedef struct UjThread{
struct{
UInt32 runInstr;
UInt8* mailbox;
}appBucket;
struct{
UInt32 appId;
UInt32 numInstr;
UInt32 allocMem;
UInt32 eepromStartAddr;
}appContract;
UInt16 spBase; //we use an empty ascending stack
UInt16 spLimit; //also used for "isPtr"
UInt16 localsBase;
UInt32 stack[];
}UjThread;
Я запустить поток для каждого объекта и выделите необходимую память (92 байта для этой структуры, но я не показал все поля). Однако некоторые объекты не будут использовать внутренние структуры appContract и appBucket, но память для этих структур все равно будет выделена.
Есть ли способ избежать этого? Чтобы обозначить внутренние структуры как необязательные или, возможно, извлечь размер этих внутренних структур и вычесть их из выделения памяти?
Я мог бы создать две отдельные структуры, по одному на тип объекта, но я бы предпочел не делать этого, так как мне придется корректировать код везде, чтобы работать с двумя типами потоков.
Внутренние структуры нельзя сделать опциональными; если потребление памяти является проблемой, единственное решение, как вы указали: определить 'appBucket' и' appContract' как отдельные структуры и использовать указатели для них внутри 'UjThread'. – Codor
Из любопытства, какой это странный процессор? Многоядерный, но не может позволить себе выделить 92 байта? – Lundin
@ Lundin Я использую 500-мегагерцовый 8-ядерный процессор с 64 КБ ОЗУ для кода и данных, так что это не неслыханно. Это довольно современный продукт, но с [заметным наследием] (http://www.wikiwand.com/en/Inmos) :) –