69,374
社区成员
发帖
与我相关
我的任务
分享
struct abc {
uint32_t a;
};
source code:
11 __attribute__ ((__section__(".init.data"))) uint32_t fw_ver = 0;
20 struct spinlock {
21 uint32_t lock;
22 }__attribute__((packed));
78 __attribute__ ((__section__(".init.data"))) spinlock_t dbg_lock = {.lock = 0};
79 __attribute__ ((__section__(".init.data"))) uint32_t dbg_rd_idx = 0;
ldscript:
153 SECTIONS {
154 .init.data : {
155
156 } > INIT_DATA
157 }
system.map:
482 .init.data 0x000000000003fc00 0x10
483 0x000000000003fc00 fw_ver
484 0x000000000003fc08 dbg_lock
485 0x000000000003fc0c dbg_rd_idx
我想LZ想问的是为什么dbg_lock的地址是08而不是04,对吧。毕竟fw_ver的大小是4字节,那么04就可以了。
其实我倒不奇怪dbg_lock的地址是08。因为总的来说,不管计算机是怎样的架构,访问word是最快最有效的,这点LZ应该赞同吧。64位机器字长8字节,那么比8字节小的4字节整数,自然都是对其到8的倍数地址上访问时最有效的。
我更好奇的是,为什么dbg_rd_idx的地址是0c。按照上述的推理,dbg_rd_idx的地址应该是10,这样才更有效。仔细想想,觉得是__attribute__((packed))起了作用。
我有个想法,给fw_ver加上__attribute__((aligned (4))),不知LZ能否帮忙试试,告诉我结果是怎样的。