“具有灵活数组成员的结构的“数组”

问题描述 投票:0回答:1

我正在重写一些具有结构体数组的旧代码,每个结构体都有一个数组成员,其长度在编译时是固定的。外部数组中的结构数在编译时确定,以适合(典型)内存页。我想在运行时使inner数组变量,但是保持“ outer array适合页面”逻辑(并使用sysconf(_SC_PAGESIZE)精确获取页面大小)。所以我的结构有一个灵活的数组成员

struct foo_t 
{
  bar_t *bar;
  float baz[];
};

我想要一系列这些东西,但是当然不允许。但是所有这些结构都将具有相同大小的灵活数组成员(由运行时确定),所以我可以代替它们吗?也就是说,有一个char *的空间足以容纳其中的n,自己进行偏移量计算,然后将指针偏移量转换为foo_t *,然后访问,修改,etc。

我的目标是按下C99,C11。

c casting c99 flexible-array-member
1个回答
0
投票

为什么不这样:

#define SPP 3 // foo_t structs per memory page

const size_t baz_len = 3; // example, determine this the way you do

struct foo_t (*array) = malloc(SPP * sizeof(struct foo_t) + (SPP * baz_len) * sizeof(float));

array[2].baz[2] = 0.33f;

free(array);
© www.soinside.com 2019 - 2024. All rights reserved.