2017-01-29 4 views
2

私はkmalloc()malloc()をカーネルスペースに置き換えることができることを知っています。多くの人々は、malloc()はカーネル空間では実行できないと考えています。しかし、私はそれが我々がカーネルレベルでmalloc()を使用することができることを意味していlinux-4.9.6/include/linux/decompress/mm.hmalloc()はカーネル空間にありますか?

static void *malloc(int size) 
{ 
    void *p; 

    if (size < 0) 
     return NULL; 
    if (!malloc_ptr) 
     malloc_ptr = free_mem_ptr; 

    malloc_ptr = (malloc_ptr + 3) & ~3;  /* Align */ 

    p = (void *)malloc_ptr; 
    malloc_ptr += size; 

    if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr) 
     return NULL; 

    malloc_count++; 
    return p; 
} 

でこの定義を見つけましたか?一言で

+2

一般的なカーネルの使用ではありません。ファイルヘッダーは、それが何であるかを正確に示しています: "ブート前とラムディスクの圧縮解除のためのメモリ管理"。 – kaylum

+0

関数を読んで、汎用malloc置換として適しているかどうかを調べてください。 –

答えて

2

:いいえ

そのコードは、それが何のためにあるのかを説明先立つコメント:kmalloc()が利用可能になる前に、このコードはごく初期のシステムの初期化中に使用されている

* Memory management for pre-boot and ramdisk uncompressors 

。 (おそらく、コードが解凍される前に!)それは信じられないほど制限されています - メモリを解放することはできません - したがって、それは非常に小規模でしか使用できません。

カーネルにメモリを割り当てる必要がある場合は、kmalloc()ファミリの機能を使用する必要があります。


*:一つ一つの割り当てられたブロックが解放されています:1つの非常に特定の状況下でこのmalloc()、それができるだけの空きメモリとペアfree()の実装がありますが。

関連する問題