我正在windows上编写解释型语言,我使用PAGE_GUARD
来实现栈和HeapCreate
/HeapAlloc
动态分配我的语言。在linux(或POSIX)中的函数类似于win32 mem api
也许我需要将我的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_GUARD
- bit complex;它用于实现堆栈。例如,有一个堆栈,其最大大小为5页。为了节省内存,我只分配一个页面,只是“保留”4页的虚拟内存地址。
---------
| alloc |
---------
|reserve|
---------
|reserve|
---------
|reserve|
---------
|reserve|
---------
当第一页堆栈被完全使用,并且程序将要使用更多堆栈时,会发生访问冲突。然后,我“提交”第二页并继续编程。
PAGE_GUARD
只是帮手做到这一点。 (在win95中,没有页面防护,所以win95在没有这个帮助器的情况下执行)如果我提前并且提前标记第二页“保护”,并且程序使用更多堆栈,则发生GUARD-异常并且操作系统取消标记页面自动。我只需要提交并标记下一页。
请参阅编辑。我知道linux和win是不同的,我只想知道“在linux下如何做”,尽管我希望这种方式类似于windows ... – ikh
不希望Linux和Windows类似:它们不是。另外,Linux是[免费软件](http://en.wikipedia.org/wiki/Free_software),您可以也应该研究源代码。 –
我不是说“win vs linux”。我只是说“如何在Linux中做”..无论如何,'mmap'和'mprotect'似乎是我找到的,谢谢!顺便说一句,有没有办法创建新的堆?那么我需要实现堆?噢.. – ikh