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

时间:2015-02-12 09:26:30

标签: c

我最近开始在C工作。我正在进行一些代码练习,以获得有关信号的一些知识。我知道alloc()用于为信号分配内存。在以下代码中len是我的data_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 and -1。当我们执行sizeof(struct data_send)时,我们正在为结构中的所有变量分配内存。这个-1是否必须对data[1]执行任何操作?有人可以向我解释+len and -1的原因。

1 个答案:

答案 0 :(得分:2)

是的,数据[1]已经是1个字符长,因此它包含在sizeof(struct data_send)中。因此,sizeof(struct data_send) + len会产生一个比需要稍长的块。