Это зависит от определения соответствующего содержания.
Если вы не заботитесь о содержимом памяти, вы можете просто использовать kmalloc
; это случай распределения буфера, вы не заботитесь о первоначальном содержимом, потому что вы собираетесь написать свои данные. В этом случае вы сохраняете «стоимость» установки памяти на 0.
Но все по-другому, если вы собираетесь выделить память для структуры. Лично я предпочитаю kzalloc
только тогда, когда хочу выделить структуры, где я собираюсь установить некоторое значение (отличное от 0), но в то же время я хочу установить все остальные поля структуры в известное и действительное состояние (нуль). Например:
struct test {
int counter;
void *buffer;
int n_data;
};
В этом случае, если я буду использовать kzalloc
спасу некоторые строки кода, потому что:
- инициализировать счетчик 0 в начале, как правило, это хорошая вещь делать;
набор для NULL
буфере это также хорошо, потому что я передать его позже, и установив его на NULL
я могу просто написать следующее, потому что это известно состояние:
if (!t->buffer)
t->buffer = kmalloc(10);
установки количества данные n_data
в ноль хороши, потому что буфер в начале пуст и не выделен.
Конечно, если в вашей структуре вы собираетесь установить вручную большинство полей со значением иной, чем ноль, то это сделать меньше смысла (по крайней мере для меня), чтобы инициализировать все к нулю с kzalloc
Что делать, если вы забыли написать память и прочитать ее. Или что, если вы читаете необнужденную память, прежде чем писать? –