如何在C语言中计算信号或结构所需的内存
我最近开始在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
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 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字节长。这不是一个绝对的事实,但我不愿意反对它,因此,我删除了这个建议。