gpt4 book ai didi

C - 结构化缓冲区的设计模式?

转载 作者:行者123 更新时间:2023-11-30 14:23:08 25 4
gpt4 key购买 nike

我有一个 N 字节长的缓冲区,其中 N 至少为 50。该缓冲区采用非常特定的格式,其中前 4 个字节是一个无符号整数,表示缓冲区的长度(包括这四个字节) 。接下来的 16 个字节是四个具有不同含义的无符号整数。接下来的 N-20 字节是一些通用的内存缓冲区。

现在,要设置此缓冲区,我会执行以下操作:

memcpy((char*)my_buf + 0, &buf_size, 4);    //buf_size is some unsigned int
memcpy((char*)my_buf + 4, &prop0, 4); //buf_size is some unsigned int
memcpy((char*)my_buf + 8, &prop1, 4); //buf_size is some unsigned int
memcpy((char*)my_buf + 12, &prop2, 4); //buf_size is some unsigned int
memcpy((char*)my_buf + 16, &prop3, 4); //buf_size is some unsigned int
//Many more bytes used as a generic buffer

但是,这看起来很不优雅。此时,我想询问社区是否有一种更优雅的方法,可以在给定初始地址时将特定值分配给特定的内存偏移量。

我考虑过使用结构体,但是 IIRC 结构体不能保证其成员在内存中的放置顺序,而且我不知道结构体如何表示缓冲区的尾部(通用内存空间)。

最佳答案

a struct does not guarantee which order its members are placed in memory

那是假的。订单有保证。最终编译器可以引入一些填充。但是您正在使用 4 字节的倍数,因此不应发生填充(至少在 32 位架构中,您的是什么?)。

看看这个 thread ,特别是对 CC++ 标准的引用。

关于C - 结构化缓冲区的设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13167481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com