如何在C语言中计算信号或结构所需的内存

如何在C语言中计算信号或结构所需的内存,c,C,我最近开始在C语言中工作。我正在进行一些代码练习,以获得一些关于信号的知识。我知道alloc()用于为信号分配内存。在下面的代码len中,是在结构中定义的mydata\u len。看看下面的场景 #define DATA_SEND (SIGBASE + 1) struct data_send { uint32_t sig_no ; uint32_t seq_no ; uint32_t data_len; uint32_t t

我最近开始在C语言中工作。我正在进行一些代码练习,以获得一些关于信号的知识。我知道
alloc()
用于为信号分配内存。在下面的代码
len
中,是在结构中定义的my
data\u len
。看看下面的场景

#define DATA_SEND   (SIGBASE + 1)
struct data_send
{
  uint32_t       sig_no  ;
  uint32_t       seq_no  ;
  uint32_t       data_len;
  uint32_t       type    ;   
  char           data[1] ;    
};

signal = (struct data_send *) alloc(sizeof(struct data_send) + len - 1,
           DATA_SEND);

我的问题是,在为该信号分配内存时,为什么要执行
+len和-1
。当我们执行sizeof(struct data\u send)时,我们正在为结构中的所有变量分配内存。这个
-1
是否与
数据[1]
有关?有人能给我解释一下为什么要使用
+len和-1

是的,数据[1]已经有1个字符长了,所以它包含在
sizeof(struct data\u send)
中。因此,
sizeof(struct data_send)+len
将产生一个略长于必要长度的块。

这是哪种分配?malloc还是calloc?请记住,C中并非所有(以及大多数)对象/结构都不需要动态分配。这种技术被称为“结构黑客”。这是一个很好的解释。感谢:)我编辑了这个问题,删除了我的建议,即您不应该依赖char始终是1字节长的事实。我这样做是因为另一个用户说,根据定义,
char
将始终是1字节长。这不是一个绝对的事实,但我不愿意反对它,因此,我删除了这个建议。