逐字节读写 32 位数据数组是否安全?
Is it safe to read and write on an array of 32 bit data byte by byte?
所以我有一个 void *
的 32 位无符号整数数据,代表像素。我可以访问带有 char *
的像素之一并直接修改值吗?还是将我的新像素存储在临时 uint32_t
变量中然后分配正确的指针取消引用或至少 memcpy
?
更好?
根据硬件平台,我是否会遇到内存对齐或性能问题?
是的,没关系。
数组中没有未使用的字节,因此如果您使用 uint32_t
,您可以确保每个元素正好使用 32 位。
是的,这是正确的。唯一的危险是生成一个不对应于任何 int 的位模式,但在现代系统上没有这样的模式。此外,如果数据类型具体为 uint32_t
,则无论如何都禁止使用任何此类模式。
请注意,不允许使用 uint32_t
一次写入多个 char
的相反情况(严格的别名规则)。
所以我有一个 void *
的 32 位无符号整数数据,代表像素。我可以访问带有 char *
的像素之一并直接修改值吗?还是将我的新像素存储在临时 uint32_t
变量中然后分配正确的指针取消引用或至少 memcpy
?
根据硬件平台,我是否会遇到内存对齐或性能问题?
是的,没关系。
数组中没有未使用的字节,因此如果您使用 uint32_t
,您可以确保每个元素正好使用 32 位。
是的,这是正确的。唯一的危险是生成一个不对应于任何 int 的位模式,但在现代系统上没有这样的模式。此外,如果数据类型具体为 uint32_t
,则无论如何都禁止使用任何此类模式。
请注意,不允许使用 uint32_t
一次写入多个 char
的相反情况(严格的别名规则)。