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

标签 c arrays initialization microcontroller freertos

我正在开发微 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/

相关文章:

c - io_submit writes() 是否保证按顺序执行?

c - 在 main.c 或 source.c 中进行 Rng 初始化?

c - 如何通过引用返回结构数组?

arrays - 狂欢 : Use a variable as an associative array name

c++ - 长构造函数初始化列表

c++ - 在构造函数中初始化结构实例数据成员?

java - 将字符串设置为 ""还是保留为空?

c - 函数内的 pthread_exit()

c - 如何编译APRON的例子?

python - 如何在 Python 3.7 中向 bytearray 添加字节?