获取仅初始化第一个项目的数组的内存空间

时间:2016-02-16 16:18:39

标签: c arrays initialization microcontroller freertos

我正在使用微控制器,所以,没有malloc。实际上,我想创建一个内存管理器,所以我有点实现malloc函数供以后使用,并使用BLOCK 策略来获取它,就像FreeRTOS一样。< / p>

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获取空间,即使列表为空且每个项目都未初始化,但我已经有了空间。

2 个答案:

答案 0 :(得分:0)

您要做的就是在堆栈上自动分配内存。

#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;
}

您实际上不需要链表,您只需使用索引即可。 这接近你的要求吗?

答案 1 :(得分:0)

@LPs引用:

  

使用c写sizeof(BLOCK_t)*BLOCKS_NEEDED,你声明数组和BLOCK_t blocks[BLOCKS_NEEDED]; // Not allocating 7 * sizeof(BLOCK) 字节被数组占用。

所以我的发言:

{{1}}

是假的,它实际上确实分配了空间。