我最近开始在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
的原因。
答案 0 :(得分:2)
是的,数据[1]已经是1个字符长,因此它包含在sizeof(struct data_send)
中。因此,sizeof(struct data_send) + len
会产生一个比需要稍长的块。