get_unaligned宏 看不懂 高手请进
linux下的一个宏:
#define get_unaligned(ptr) \
({ \
struct __attribute__((packed)) { \
typeof(*(ptr)) __v; \
} *__p = (void *) (ptr); \
__p->__v; \
})
使用:
void func(const void *value)
{
uint8_t temp8;
uint16_t temp16;
uint32_t temp32;
uint64_t temp64;
temp8 = *(uint8_t *) value; //1
temp16 = get_unaligned((uint16_t *) value); //2
temp32 = get_unaligned((uint32_t *) value); //3
temp64 = get_unaligned((uint64_t *) value); //4
}
应该是内存对齐方面的,能否解释一下这个宏?为什么注释1处不需要,而2,3,4处需要?谢谢