2012-03-30 23 views
1

我有一些关于在Linux设备驱动程序中使用结构指针的基本问题。使用指针结构,而不是创建静态本地副本

以RTC ISL12022驱动器的linux /驱动器/ RTC/RTC-isl12022.c

struct isl12022 *isl12022 = i2c_get_clientdata(client); //From Function static int 
isl12022_set_datetime(struct i2c_client *client, struct rtc_time *tm) 

在上面的例子中结构的指针的一个例子是用来获取,而不是创建本地copyinto该函数的I2C客户端数据。大多数情况下,我在所有的司机都见过这种做法。因此,我期待了解使用结构指针而不是创建本地副本的优点吗?

-----------------------------------编辑---------- -------------------------------------

很好解释。谢谢。当将结构传递给需要使用的函数指针时,请同意。 但考虑到上述RTC-isl12022.c例如服用功能

isl12022_set_datetime(struct i2c_client *client, struct rtc_time *tm) 

的i2c_client结构已经传递给函数作为指针。 (Thats there)

现在在isl12022_set_datetime函数中*客户端指针直接被用来代替创建它的本地副本,然后使用该副本来确保错误地指出由* client指向的原始结构是安全的并且没有改变。

struct isl12022 isl2022; and then copy the structure pointed as i2c_get_clientdata(client); 

上面的语句将创建一个指向由i2c_get_clientdata FN返回isl12022结构isl12022结构的指针。不会是那个客户指出的原始数据结构的分布吗?

+0

如果您复制了一个结构体,它通常与原始结构体无关(除非它包含指向其他数据的指针 - 浅拷贝与深拷贝) – knittl 2012-04-02 08:31:30

回答

0

它可以节省内存。将地址传递给struct比复制struct效率更高。

相关问题