【问题标题】:How to get the sizeof a particular element in kernel space如何获取内核空间中特定元素的大小
【发布时间】:2013-10-30 07:51:32
【问题描述】:

我正在学习操作系统课程,我们正在修改 linux 内核。

我的一项特殊任务是创建一个结构并为其分配空间。我正在查看内核 api,但似乎找不到获取内核空间中元素大小的方法。

例如,我能做到吗:

struct newNode * myNode;

myNode = (struct newNode *) kmalloc(sizeof(newNode), GFR_KERNEL);

“sizeof”是内核空间中可用的命令吗?还是无法访问?如果是这样,我应该使用什么命令?

【问题讨论】:

  • sizeof 是一个操作符(C 中没有“命令”)。它是标准的,并且可以在任何类型的代码中完美使用。
  • @H2CO3 - “操作员”是什么意思?这和函数有什么不同?
  • @Shookie 不同的是,它不是函数,而是运算符。

标签: c linux linux-kernel


【解决方案1】:

这是因为你没有声明 newNode 来获取大小。

试试sizeof(struct newNode)

【讨论】:

  • 更好:sizeof *myNode.
  • 虽然它有效,但我总是发现这种方法在可读性方面含糊不清。我认为一个简单的sizeof(struct newNode) 可以立即表达你试图在那里 malloc 的类型,并且可以对多个变量重复它​​而不会失去意义。可能只有我一个人,但我认为这样更好。
  • 如果你重复 if 多次,正如你所建议的,那么有人更改了变量的类型,但忘记更改 sizeof 的参数中的类型,然后一切都乱套了(UB) .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 2012-10-04
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
相关资源
最近更新 更多