使用get_user_pages_fast后是否应该释放数据?
Should I release data after the use of get_user_pages_fast?
我正在使用 get_user_pages_fast,我在用户中分配一个内存缓冲区并在内核中创建一个页面 space。
我是否应该在使用此内存后释放结构页面**?或者调用特定的释放函数?
谢谢!
来自 get_user_pages()
的文档(具有类似的功能,但参数更多,并且需要持有信号量):
Each page returned must be released with a put_page call when it is finished with. vmas will only remain valid while mmap_sem is held.
作为一个侧节点,如果你要释放一些东西,它会是一个 struct pages *
被传递(释放一个 struct pages
),而不是 struct pages **
,因为一个指针传递给 struct pages *
以用作 return 值。
但是,您通常不应该在不知道自己应该这样做的情况下假设应该释放内核中的任意内容。通常,内核提供了创建和销毁您正在使用的任何对象的函数。
通常,当您得到指示时,幕后还有很多事情要做。可能有信号量,引用计数等。这也可能是指向内核中“真实”使用对象的指针,而不仅仅是为您制作的一些结构,因此释放它可能会破坏其他代码段下的地毯形式.
我正在使用 get_user_pages_fast,我在用户中分配一个内存缓冲区并在内核中创建一个页面 space。
我是否应该在使用此内存后释放结构页面**?或者调用特定的释放函数?
谢谢!
来自 get_user_pages()
的文档(具有类似的功能,但参数更多,并且需要持有信号量):
Each page returned must be released with a put_page call when it is finished with. vmas will only remain valid while mmap_sem is held.
作为一个侧节点,如果你要释放一些东西,它会是一个 struct pages *
被传递(释放一个 struct pages
),而不是 struct pages **
,因为一个指针传递给 struct pages *
以用作 return 值。
但是,您通常不应该在不知道自己应该这样做的情况下假设应该释放内核中的任意内容。通常,内核提供了创建和销毁您正在使用的任何对象的函数。
通常,当您得到指示时,幕后还有很多事情要做。可能有信号量,引用计数等。这也可能是指向内核中“真实”使用对象的指针,而不仅仅是为您制作的一些结构,因此释放它可能会破坏其他代码段下的地毯形式.