gpt4 book ai didi

linux-kernel - 为什么驱动程序编程更喜欢kzalloc而不是kmalloc

转载 作者:行者123 更新时间:2023-12-04 04:14:31 25 4
gpt4 key购买 nike

我正确地观察到,在设备驱动程序例程中完成任何内存分配的情况下,与kmalloc相比,kzalloc更可取?

我已经看到内核补丁用kzalloc代替kmalloc + memset。但是我的疑问是,为什么一个人根本需要设置内存内容?为什么以后无论如何都希望用相关内容写入内存时,为什么不能只使用kmalloc呢?

最佳答案

这取决于相关内容的定义。

如果您不关心内存的内容,则可以使用kmalloc;这是缓冲区分配的情况,您不必关心初始内容,因为您将要把数据写入。在这种情况下,您可以节省将内存设置为0的“费用”。

但是,如果要为结构分配内存,则情况有所不同。
就我个人而言,仅当我想分配要设置一些值(不同于0)的结构,但同时又想将结构的所有其他字段设置为已知且有效的状态(零时)时,我才喜欢kzalloc。 )。例如:

struct test {
int counter;
void *buffer;
int n_data;
};

在这种情况下,如果我使用kzalloc,我将保存一些代码行,因为:
  • 在开始时将计数器初始化为0,通常这是一件好事;
  • 设置为NULL缓冲区也是可以的,因为我稍后会分配它,通过将其设置为NULL我可以简单地编写以下内容,因为它是已知状态:
    if (!t->buffer)
    t->buffer = kmalloc(10);
  • 将数据n_data的数量设置为零是好的,因为开头的缓冲区为空且未分配。

  • 当然,如果在您的结构中要手动设置大多数字段的值不为零,那么使用kzalloc将所有内容初始化为零是没有意义的(至少对我而言)

    关于linux-kernel - 为什么驱动程序编程更喜欢kzalloc而不是kmalloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28633884/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com