Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux(或POSIX)中,函数类似于win32 mem api_Linux_Heap_Posix_Virtual Memory - Fatal编程技术网

在linux(或POSIX)中,函数类似于win32 mem api

在linux(或POSIX)中,函数类似于win32 mem api,linux,heap,posix,virtual-memory,Linux,Heap,Posix,Virtual Memory,我正在windows上编写解释语言,我使用PAGE\u GUARD实现堆栈和HeapCreate/HeapAlloc动态分配我的语言 也许我需要将我的lang移植到其他操作系统。。那么,在linux(或POSIX标准..)中,什么与这些win32 api相似?(我希望它们在使用上不会有太大的不同.) 好的,如果您不了解这些win32 API,请参见下面的内容: HeapCreate-简单。创建新堆: void *mem = malloc(123); // alloc from default

我正在windows上编写解释语言,我使用
PAGE\u GUARD
实现堆栈和
HeapCreate
/
HeapAlloc
动态分配我的语言

也许我需要将我的lang移植到其他操作系统。。那么,在linux(或POSIX标准..)中,什么与这些win32 api相似?(我希望它们在使用上不会有太大的不同.)


好的,如果您不了解这些win32 API,请参见下面的内容:

HeapCreate
-简单。创建新堆:

void *mem = malloc(123); // alloc from default heap
HANDLE hHeap = HeapCreate(...); // create a new heap
void *mem2 = HeapAlloc(hHeap, some_flag, 123); // alloc from new heap
PAGE\u-GUARD
-位复杂;它用于实现堆栈。例如,有一个最大大小为5页的堆栈。为了节省内存,我只分配一页,只“保留”4页的虚拟内存地址

---------
| alloc |
---------
|reserve|
---------
|reserve|
---------
|reserve|
---------
|reserve|
---------
当堆栈的第一页被完全使用,并且程序将要使用更多堆栈时,就会发生访问冲突。然后,我“提交”第二页并继续程序

PAGE\u-GUARD
就是这样做的助手。(在win95中,没有页面保护,因此win95在没有此帮助程序的情况下执行)如果我提前提交并将第二个页面标记为“保护”,并且程序使用更多堆栈,则会发生保护异常,操作系统会自动取消标记页面。我只需提交并标记下一页。

阅读。不要在Linux中为您知道或想要的Win32的每个功能寻找完全相同的功能。学习用Linux术语进行本机思考。学习与你相似的东西(参见或找到一些)

是的,Posix或Linux与Windows是非常不同的,特别是它们的概念,等等

你可能想要和;我根本不知道Windows(所以我不知道
HeapCreate
做什么)

也许使用跨平台工具包的底层(例如,
QtCore
…)或(来自Gtk…)会对您有所帮助

Linux通常是可用的(但您可以使用其他一些,例如,它在IMHO中非常可读)。中列出并由实施的It用途(特别是,通常在上面构建…)

如果对你有帮助的话,养成研究自由软件源代码的习惯


请参阅编辑。我知道linux和win是不同的,我只想知道“在linux中如何做”,尽管我希望方式与windows相似……不要希望linux和windows相似:它们不是。另外,Linux是,你可以也应该学习源代码。我不是说“WinVSLinux”。我只是说“在linux中如何操作”。。无论如何,
mmap
mprotect
似乎就是我发现的,谢谢!顺便说一句,没有办法创建新堆吗?那么我需要实现堆吗?哦..我不知道你叫什么堆。仅供参考,
malloc
正在使用
mmap
,您可以研究或改进它的源代码(因为它是免费软件)。还感谢您推荐一本好书,但似乎没有我语言的翻译版本!我很难过。。