我正在开发微 Controller ,因此没有malloc
。实际上,我想创建一个内存管理器,所以我有点实现 malloc
函数以供以后使用,并使用 BLOCK
策略 来获取它,就像 FreeRTOS 一样。
typedef struct BLOCK {
unsigned char used; // If 1 block is used, if 0 it's free to use
unsigned long offset; // Offset of the starting block
unsigned long size; // Size of this block
struct BLOCK * next; // Pointer to the next block
} BLOCK_t;
#define MAX_PROGRAMS 3
#define BLOCKS_NEEDED (MAX_PROGRAMS * 2) + 1
BLOCK_t blocks[BLOCKS_NEEDED]; // Not allocating 7 * sizeof(BLOCK)
这个BLOCK
是一个链接列表,我想创建(分配)固定数量的它们并仅设置第一个blocks[0]
。下一个将在分配内存时在执行时创建。
提前致谢。
编辑:如果标题不够清楚,我希望编译器为我的数组分配一些内存空间(固定位置和大小),但我不想用数据初始化它因为我将在运行时获取数据,所以我想要一个包含 7 个 BLOCK 的数组,其中包含空数据。上面的代码显示了我的尝试,我声明了数组,但我假设声明数组不会为您提供所需的空间。我怎样才能做到这一点?我怎样才能让编译器给我这个空间?
编辑2:这将是执行此操作的Java代码。
private static int MAX_PROGRAMS = 3;
private static int BLOCKS_NEEDED = (MAX_PROGRAMS * 2) + 1:
Block myBlockList[] = new Block[BLOCKS_NEEDED];
这会为 myBlockList
获取空间,即使列表为空并且每个项目都未初始化,但我已经拥有了空间。
最佳答案
您要做的就是在堆栈上自动分配内存。
#include <stdio.h>
#define blockcontent_size 1024
#define blockcount 3
typedef struct
{
unsigned char used;
unsigned long offset;
unsigned long size;
unsigned data[blockcontent_size];
} BLOCK;
BLOCK blocks[blockcount];
int main()
{
printf("memory available in one block %u\n", sizeof(blocks[0].data));
printf("memory used for one block %u\n", sizeof(BLOCK));
printf("memory used for all blocks %u\n", sizeof(blocks));
return 0;
}
你实际上不需要链表,你可以只使用索引。 这与您要问的接近吗?
关于c - 获取仅初始化第一项的数组的内存空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35437626/