- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想为 Linux 创建一个可加载的内核模块。这是代码
#include <linux/module.h>
#include <linux/init.h>
static int __init mymodule_init(void)
{
printk ("My module worked!\n");
return 0;
}
static void __exit mymodule_exit(void)
{
printk ("Unloading my module.\n");
return;
}
module_init(mymodule_init);
module_exit(mymodule_exit);
MODULE_LICENSE("GPL");
现在请注意 __init
宏。正如文档所说:
The __init macro indicates to compiler that that associated function is only used during initialization. Compiler places all code marked with __init into a special memory section that is freed after initialization
我试图理解为什么初始化方法最终会泄漏内存。是由于堆栈中函数调用的 FIFO 处理吗?
最佳答案
概括地说:
可执行代码(编译成的源代码)占用内存。现代 CPU 会读取指令所在的内存部分,然后执行它们。对于大多数用户空间应用程序,进程内存的代码段被加载一次,并且在程序执行期间永远不会改变。代码总是存在的,除非程序员使用它。
这不是问题,因为操作系统将管理进程虚拟内存,冷代码段最终将卸载到交换文件中。物理内存永远不会像在用户空间中那样“浪费”。
对于内核,代码在特权模式下运行,不会像在用户模式下那样“卸载”未使用的页面。如果一个函数被放在内核的常规代码段中,那么只要内核运行,它就会占用物理内存,这可能是相当长的时间。如果一个函数只被调用一次,那就太浪费空间了。
虽然现在可加载的内核模块一般都可以加载和卸载,所以它们的代码可能不会无限期地占用空间,但是对于一个只会被调用一次的函数占用空间还是有些浪费。
由于现代 CPU 将代码视为一种可执行数据,因此可以将该数据放入不会无限期保留的内存段中。该函数被加载,然后被调用,然后该段可以用于其他事情。这就是 __init
宏指示编译器执行的操作。发出调用后可以轻松卸载的代码。
关于c - C 中的内核模块 __init 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48558460/
此处的描述 - http://www.tldp.org/LDP/lkmpg/2.4/html/x281.htm - 页面(以及关于 SO 的一些相关答案,例如这里的答案 - __init and __
表格 class ImportExcelForm(Form): file = forms.FileField(attrs={'class':'rounded_list',}) 我正在尝试将C
我无法找出造成此错误的原因 TypeError: __init__() takes at most 2 arguments (3 given) 指向 @user_blueprint.route('/l
我的Python应用程序结构是这样的: run.py app/__init.py__ app/config.py app/ 在我的 app/__init.py 中,我想检查变量 DEBUG_MODE
我正在阅读有关 linux 内核开发的信息,但我只是阅读了一些我不理解的文本。以下是关于模块的 __init 和 __exit 宏的段落: This demonstrates a feature of
我想为 Linux 创建一个可加载的内核模块。这是代码 #include #include static int __init mymodule_init(void) { printk ("My
内核中有很多__init 调用的实例,包括驱动程序module_init 和内核的其他函数。我怀疑内核是如何确定 __init 调用的顺序的。更重要的是,它如何确定驱动程序 module_init 调
我遇到了常见的 clojure 错误: Unhandled java.io.FileNotFoundException Could not locate org/dsteurer/doctex__in
我有一个用 python 编写的不和谐机器人。但问题是,它仅在部署在 heroku 上时才有效,但根本不在本地运行。 这是文件夹结构 - feed - __init__.py - token.
如果在初始化和退出模块中使用 __init 和 __exit 属性会发生什么,如果我不使用它们会发生什么。示例如下图所示。 使用属性 static __init int myinit(void) {}
我最近更新了锂库,我遇到了这个问题。我收到此错误: 运行时异常 弃用 `app\models\StoreCategories::__init()` 方法,需要手动调用。 来源 /works/minhn
我在 django 中使用 get_model 和 get_models 时遇到问题 我在models下有几个模型/ models/blog.py models/tags.py models/u
我知道这个问题在这里被问过很多次,我可能已经阅读了大部分答案(包括 this 和 that )以及 python 文档,但仍然找不到我非常简单的答案导入问题。它是如此简单,以至于我一定错过了一些愚蠢的
__read_moSTLy 的宏展开: #define __read_mostly __attribute__((__section__(".data..read_mostly")) 这个来自cach
我正在尝试从 torchvision.io 导入 read_image当我将鼠标悬停在它说的错误上时 torchvision.io 在“__init.py__”中找不到引用“read_image” f
我是linux新手,对于函数static int __init console_setup(char *str),它会返回int,函数名称是console_setup,但是这里的_init是什么意思?
我正在尝试让 Python 脚本在我的 Ubuntu 服务器上运行。我有以下目录结构: /home/pythontest |_ __init__.py |_ main.py
我目前正在尝试使用 mozilla deepspeech 训练语音识别模型。这已经在linux上完成了。 MacO 从来没有遇到过问题,但现在遇到了问题。 我已经厌倦了两次设置虚拟环境来解决这个问题,
This is the code:这是代码: options = Options() options.add_experimental_option("excludeS
我有以下文件: pkg/__init_.py pkg/module.py 现在,在 pkg/__init__.py 中,如何导入 module? 是吗 import pkg.module 或 impo
我是一名优秀的程序员,十分优秀!