Использование указателя на структуру вместо создания статической локальной копии - PullRequest
1 голос
/ 30 марта 2012

У меня возник какой-то основной вопрос об использовании указателя структуры в драйверах устройств Linux.

На примере драйвера RTC ISL12022 linux / drivers / 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)

В приведенном выше примере указатель структуры используется для получения данных клиента I2C вместо создания локального копирования в функцию.В основном я видел такую ​​практику у всех водителей.Тем самым я хочу узнать о плюсах использования структурного указателя вместо создания локальной копии?

-----------------------------------РЕДАКТИРОВАТЬ-----------------------------------------------

Красиво объяснил.Благодарю.При передаче структуры в функцию необходимо использовать указатель, согласитесь на это.Но, учитывая приведенный выше пример rtc-isl12022.c с функцией

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

, структура i2c_client уже передана функции в качестве указателя.(Вот так)

Теперь внутри функции isl12022_set_datetime * указатель клиента использовался напрямую, вместо того, чтобы создавать его локальную копию, а затем использовать эту копию, чтобы по ошибке убедиться, что исходная структура, указанная * client, безопасна и не изменена.

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

Приведенный выше оператор создаст указатель структуры isl12022, который указывает на структуру isl12022, возвращаемую i2c_get_clientdata fn.Разве это не искажает исходную структуру данных, на которую указывает клиент?

1 Ответ

0 голосов
/ 30 марта 2012

Это экономит память. Передача адреса в struct гораздо эффективнее, чем копирование struct вокруг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...