gpt4 book ai didi

c++ - libjpeg 中的指针对齐

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:07 37 4
gpt4 key购买 nike

来自 jmorecfg.h :

#define PACK_TWO_PIXELS(l,r)   ((r<<16) | l)
#define PACK_NEED_ALIGNMENT(ptr) (((int)(ptr))&3)
#define WRITE_TWO_PIXELS(addr, pixels) do { \
((INT16*)(addr))[0] = (pixels); \
((INT16*)(addr))[1] = (pixels)>>16; \
} while(0)
#define WRITE_TWO_ALIGNED_PIXELS(addr, pixels) ((*(INT32*)(addr)) = pixels

有人可以解释 WRITE_TWO_PIXELS 和 WRITE_TWO_ALIGNED_PIXELS 之间的区别吗?如果 pixels 是分配给 uint32_t 和 addr & 3 == 0 的堆栈,它们不应该是等价的吗?

谢谢。

最佳答案

WRITE_TWO_PIXELSWRITE_TWO_ALIGNED_PIXELS 对于小端机器是等效的,但对于大端架构则不是。

[示例编辑:感谢 Steve Jessop]

设,像素 = 0x0A0B0C0D

对于大端机器,WRITE_TWO_PIXELS 工作如下:

---------------------
| 0B | 0A | 0D | 0C |
---------------------
3 2 1 0 <--- addr

WRITE_TWO_ALIGNED_PIXELS 会写成如下:

---------------------
| 0D | 0C | 0B | 0A |
---------------------
3 2 1 0 <--- addr

关于c++ - libjpeg 中的指针对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3782303/

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