最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux內(nèi)核環(huán)境下如何申請(qǐng)大塊內(nèi)存?

  發(fā)布時(shí)間:2017-03-28 17:11:27   作者:佚名   我要評(píng)論
最近一些朋友反饋說不知道Linux內(nèi)核環(huán)境下如何申請(qǐng)大塊內(nèi)存?今天小編將為大家?guī)淼氖荓inux內(nèi)核環(huán)境下申請(qǐng)大塊內(nèi)存的方法!有需要的朋友一起去看看吧

在Linux內(nèi)核環(huán)境下,申請(qǐng)大塊內(nèi)存的成功率隨著系統(tǒng)運(yùn)行時(shí)間的增加而減少,雖然可以通過vmalloc系列調(diào)用申請(qǐng)物理不連續(xù)但虛擬地址連續(xù)的內(nèi)存,但畢竟其使用效率不高且在32位系統(tǒng)上vmalloc的內(nèi)存地址空間有限。所以,一般的建議是在系統(tǒng)啟動(dòng)階段申請(qǐng)大塊內(nèi)存,但是其成功的概率也只是比較高而已,而不是100%。如果程序真的比較在意這個(gè)申請(qǐng)的成功與否,只能退用“啟動(dòng)內(nèi)存”(Boot Memory)。下面就是申請(qǐng)并導(dǎo)出啟動(dòng)內(nèi)存的一段示例代碼:
 

void* x_bootmem = NULL;
EXPORT_SYMBOL(x_bootmem);

unsigned long x_bootmem_size = 0;
EXPORT_SYMBOL(x_bootmem_size);

static int __init x_bootmem_setup(char *str)
{
        x_bootmem_size = memparse(str, &str);
        x_bootmem = alloc_bootmem(x_bootmem_size);
        printk("Reserved %lu bytes from %p for x\n", x_bootmem_size, x_bootmem);

        return 1;
}
__setup("x-bootmem=", x_bootmem_setup);

可見其應(yīng)用還是比較簡(jiǎn)單的,不過利弊總是共生的,它不可避免也有其自身的限制:

1.內(nèi)存申請(qǐng)代碼只能連接進(jìn)內(nèi)核,不能在模塊中使用。

2.被申請(qǐng)的內(nèi)存不會(huì)被頁(yè)分配器和slab分配器所使用和統(tǒng)計(jì),也就是說它處于系統(tǒng)的可見內(nèi)存之外,即使在將來的某個(gè)地方你釋放了它。

3.一般用戶只會(huì)申請(qǐng)一大塊內(nèi)存,如果需要在其上實(shí)現(xiàn)復(fù)雜的內(nèi)存管理則需要自己實(shí)現(xiàn)。

在不允許內(nèi)存分配失敗的場(chǎng)合,通過啟動(dòng)內(nèi)存預(yù)留內(nèi)存空間將是我們唯一的選擇。

相關(guān)文章

最新評(píng)論

临城县| 和田市| 农安县| 宜昌市| 安溪县| 宁波市| 嘉定区| 塘沽区| 永嘉县| 商南县| 扎囊县| 察雅县| 东辽县| 南京市| 利辛县| 宜阳县| 砚山县| 林州市| 彩票| 河东区| 石门县| 咸阳市| 乌海市| 买车| 洪江市| 甘泉县| 日喀则市| 侯马市| 富锦市| 岱山县| 高邮市| 阳春市| 铜鼓县| 安平县| 独山县| 英德市| 禹城市| 德令哈市| 佛坪县| 塔河县| 噶尔县|