仅初始化第一项的数组获取内存 space
Get memory space for an array only initializing first item
我正在研究微控制器,所以,没有 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]
。分配内存时,将在执行时创建下一个。
提前致谢。
编辑:如果标题不够清楚,我想编译器为我的数组分配一些内存space(固定位置和大小)但我不想用数据初始化它,因为我将在 run-time 中获取数据,所以我想要一个包含 7 BLOCK
个空数据的数组。上面的代码显示了我的尝试,我声明了数组,但我假设声明数组不会为您提供所需的 space。我怎样才能做到这一点?我怎样才能让编译器给我 space ?
编辑 2: 这将是 Java 代码。
private static int MAX_PROGRAMS = 3;
private static int BLOCKS_NEEDED = (MAX_PROGRAMS * 2) + 1:
Block myBlockList[] = new Block[BLOCKS_NEEDED];
即使列表为空并且每个项目都未初始化,这也会为 myBlockList
获取 space,但我已经有了 space。
您只想在堆栈上自动分配内存。
#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;
}
其实不需要链表,直接用索引即可。
这接近您的要求吗?
@LP 引用:
Using c writing BLOCK_t blocks[BLOCKS_NEEDED];
you are declaring the array and sizeof(BLOCK_t)*BLOCKS_NEEDED
bytes are occupied by the array.
所以我的声明:
BLOCK_t blocks[BLOCKS_NEEDED]; // Not allocating 7 * sizeof(BLOCK)
是错误的,它实际上确实分配了 space。
我正在研究微控制器,所以,没有 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]
。分配内存时,将在执行时创建下一个。
提前致谢。
编辑:如果标题不够清楚,我想编译器为我的数组分配一些内存space(固定位置和大小)但我不想用数据初始化它,因为我将在 run-time 中获取数据,所以我想要一个包含 7 BLOCK
个空数据的数组。上面的代码显示了我的尝试,我声明了数组,但我假设声明数组不会为您提供所需的 space。我怎样才能做到这一点?我怎样才能让编译器给我 space ?
编辑 2: 这将是 Java 代码。
private static int MAX_PROGRAMS = 3;
private static int BLOCKS_NEEDED = (MAX_PROGRAMS * 2) + 1:
Block myBlockList[] = new Block[BLOCKS_NEEDED];
即使列表为空并且每个项目都未初始化,这也会为 myBlockList
获取 space,但我已经有了 space。
您只想在堆栈上自动分配内存。
#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;
}
其实不需要链表,直接用索引即可。 这接近您的要求吗?
@LP 引用:
Using c writing
BLOCK_t blocks[BLOCKS_NEEDED];
you are declaring the array andsizeof(BLOCK_t)*BLOCKS_NEEDED
bytes are occupied by the array.
所以我的声明:
BLOCK_t blocks[BLOCKS_NEEDED]; // Not allocating 7 * sizeof(BLOCK)
是错误的,它实际上确实分配了 space。