[英]C - best practice for casting a void* to int, kernel
我正在为Linux内核编写模块,并且想在文件私有数据中存储一个int
值。
本质上,我要做的是: file->private_data = (void*) x
其中x是一些int
值。
现在,我想将int作为值进行访问。
使用int val = (int) file->private_data
会在编译期间给出cast from pointer to integer of different size
警告,这是合理的,因为这可能会在64位系统上引起问题。
我也不能使用uintptr_t
因为我正在内核中工作,而且无法访问库。
使用double
似乎不合适。
我的问题是:最佳做法是什么?
在gcc世界(Linux内核由gcc编译)中, long
(或unsigned long
)具有与指针相同的大小。 将指针转换为整数然后返回时,可以使用此功能:
// store
file->private_data = (void*)(long) x;
// load
int val = (int) (long) file->private_data;
注意 :此答案专门针对Linux内核编程。
对于用户空间应用程序,建议的方法可能被视为不好的做法 ,或者仅仅是错误的 做法 。
您能详细说明一下如何将自己存储在合理的位置吗?
通常,这将是指向引用计数对象的指针。 特别是,如果您使用它来查找另一个对象,则该字段可能应该仅指向该对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.