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的值没有意义,晕。