结构体数据对齐

本文探讨了在driverAPI中如何使结构体参数符合device端的8字节对齐要求。作者尝试了使用#pragmapack及__attribute__((aligned(8)))等方法,并分享了在不同环境下的对齐特性及遇到的问题。
摘要由CSDN通过智能技术生成

driver API中需要对function传递参数,本来这个是device端的对齐问题。但是当我想用结构体来传递参数时,想让结构体的对齐方式与device要求的一致,这时是主机端代码的问题了。如果认为device端数据都必须按照8byte对齐(其实不对齐也可以,不知道这个说法怎么来的),怎么做呢?

 

查了一下,用 #pragma pack ([n])可以,或者:

typedef struct kernel_args {
    int dummy;
    CUdeviceptr d_res;
}__attribute__((aligned(8)));

 

但是试了下,两种方法都不行。。。

 

再查,某人说在vc6中栈的对齐方式不受结构成员对齐选项的影响。(本来就是两码事)。它总是保持对齐,而且对齐在4字节边界上。那么其他环境可能也是这样的@_@

 

所以接下来我就试着把结构体分配在堆上,还是没有任何作用。最后我知道了,如果默认的对齐为4,只有aligned(n)中的n小于4才有效果,大于4的值没有意义,晕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值