gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:36:40 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com