我正在和一位同事討論關於malloc的問題,並想知道是否某些libc調用像malloc這樣的情況是由操作系統實現的?libc和malloc是操作系統的一部分嗎?
我一直認爲malloc調用了一些在「sys」中公開的符號來聲明它將使用哪些內存地址。從我認爲操作系統將允許使用一些操作系統級別的API ...這可能類似於被指定的程序的分割:
int assign_memory_segmention(size_t start, size_t end);
我知道我的文件stdlib.h頭是因爲GPL的GNU的一部分頭......並且GNU已經確保通知我......他們不是Unix。那麼malloc只是某種類型的指向OS堆實現的函數指針?
'malloc'調用系統調用來提供動態內存分配行爲。在Linux中它調用'brk'和'mmap'。所以我把它稱爲系統功能的抽象。 –
C庫包含許多預編譯的普通C代碼,以使程序員/用戶可以訪問它。大部分代碼不是系統調用。操作系統本身不實現'malloc()';它提供了一個允許'malloc()'請求更多內存的機制,但'malloc()'負責將該內存分發給程序。所以,它們不是內核的一部分。 OTOH,C庫中的函數隨操作系統一起提供,並且被大多數程序使用,所以它們與操作系統密切相關。 –
小問題:大多數GPL授權代碼與GNU或自由軟件基金會無關(除非使用由他們創建和公佈的許可證)。由於您的系統可能使用glibc,因此它實際上是* GNU項目的一部分,但是(例如)Linux內核在其源代碼和頭文件中攜帶相同的GPL頭部。 – delnan