【发布时间】:2016-03-31 09:55:52
【问题描述】:
我正在用 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内使用指向它们的指针。 -
出于好奇,那是什么奇怪的处理器?多核却负担不起分配 92 字节?
-
@Lundin 我碰巧使用 500MHz 8 核 CPU 和 64kB RAM 来存储代码和数据,所以这并非闻所未闻。这也是一个相当现代的产品,但有notable heritage :)
-
@Lundin,带有 4KB RAM 的 Atmega128 嵌入式设备的美妙世界 :-)
-
@SvenAkkermans 除非我弄错了,否则这是一个单核 8 位 MCU。如果你的内存这么少,为什么要尝试实现像线程一样臃肿的东西?没有任何好处,它只会使程序变慢并消耗更多内存。要模拟多任务,只需制作一个调度程序。
标签: c embedded structure memory-efficient