如何在沒有Malloc的情況下動態(tài)管理內(nèi)存 V2.0

為啥VEX沒有malloc啊~~~

問:當(dāng)沒有malloc的情況下粒竖,應(yīng)該怎么辦
答:沒有槍壤追,沒有炮,自己給自己造~~~

經(jīng)過上次的實(shí)踐款票,我們已知要做出和原版malloc相似的功能至少需要三樣?xùn)|西杂抽。

  1. 一塊可以訪問的內(nèi)存塊
  2. 表示數(shù)據(jù)在內(nèi)存中位置的值(指針)
  3. 訪問數(shù)據(jù)的方法

在上個版本的內(nèi)存管理中自点,第一個要素是一個由MemoryUnit 組成的數(shù)組遂赠,第二個要素為一個int值久妆,來保存取得的MemoryUnit位置。因?yàn)榈诙€要素不是原生的指針跷睦,所以需要額外的Get和Set函數(shù)來作為第三要素筷弦。
那么如果把第二要素改為原生的指針,就不需要額外的讀取和保存方法送讲。在使用高級的數(shù)據(jù)結(jié)構(gòu)時也不需要另外修改結(jié)構(gòu)奸笤。

什么是指針

變量二要素
1.儲存空間
2.讀取方法

基本上看過C的人都對指針有一定了解。指針是一個值哼鬓。一個指向?qū)?yīng)內(nèi)存地址的值监右。指針雖然有不同的類型,像int指針异希,char指針健盒,結(jié)構(gòu)體指針,但是指針讀取方法是不變的称簿。唯一不同的是指針指向的空間大小是變化的扣癣。
實(shí)驗(yàn)1

void main(){
    char memory[10];
    int* num=(int*)memory;
    int* num2=(int*)&(memory[4]);
    printf("num: %p\n",num);
    printf("num2: %p\n",num2);
}
output:
    num: 0079FB44
    num2: 0079FB49

從上述實(shí)驗(yàn)可以看出char指針可以轉(zhuǎn)換為int并且可以正常使用。這證實(shí)了一件事情憨降,不同類型的指針是可以相互轉(zhuǎn)換的父虑,只要空間大小匹配使用是沒有問題的。
那根據(jù)以上的描述和原裝的函數(shù)定義char* malloc(int size)可以腦補(bǔ)出大致的結(jié)構(gòu)授药。

動態(tài)內(nèi)存管理實(shí)現(xiàn)

那就上代碼吧

void init() {
    for (int i = 0; i<MEMORY_SIZE; i++) {
        heap[i] = 0;
        info[i] = 0;
    }
    coreState.memorySize = MEMORY_SIZE;
    coreState.state = 1;
    coreState.freeMemoryCount = MEMORY_SIZE;
}
int* malloc(int size) {
    for (int i = 0; i<MEMORY_SIZE; i++) {
        int notEnoughSpacce = 0;
        if (info[i] == 0) {
            if ((i + size)<MEMORY_SIZE) {
                for (int j = 0; j<size; j++) {
                    if (info[j + i] != 0)
                    notEnoughSpacce = 1;
                }
                if (notEnoughSpacce == 0) {
                    for (int j = 0; j<size; j++) {
                        info[j + i] = 1;
                    }
                    return &(heap[i]);
                }
            }
        }
    }
    return &null;
}
void free(int* pointer, int size) {
    for (int i = 0; i<MEMORY_SIZE; i++) {
        if (&(heap[i]) == pointer) {
            for (int j = 0; j<size; j++) {
                heap[i + i] = null;
                info[j + i] = 0;
                
            }
        }
    }
}

可以看出士嚎,與上次的架構(gòu)相比,這次的可以使用c原裝的指針來訪問相應(yīng)的位置悔叽。在使用高級的數(shù)據(jù)結(jié)構(gòu)時也更加方便莱衩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市娇澎,隨后出現(xiàn)的幾起案子笨蚁,更是在濱河造成了極大的恐慌,老刑警劉巖趟庄,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件括细,死亡現(xiàn)場離奇詭異,居然都是意外死亡戚啥,警方通過查閱死者的電腦和手機(jī)勒极,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虑鼎,“玉大人辱匿,你說我怎么就攤上這事键痛。” “怎么了匾七?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵絮短,是天一觀的道長。 經(jīng)常有香客問我昨忆,道長丁频,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任邑贴,我火速辦了婚禮席里,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拢驾。我一直安慰自己奖磁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布繁疤。 她就那樣靜靜地躺著咖为,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稠腊。 梳的紋絲不亂的頭發(fā)上躁染,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機(jī)與錄音架忌,去河邊找鬼吞彤。 笑死,一個胖子當(dāng)著我的面吹牛叹放,可吹牛的內(nèi)容都是我干的饰恕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼许昨,長吁一口氣:“原來是場噩夢啊……” “哼懂盐!你這毒婦竟也來了褥赊?” 一聲冷哼從身側(cè)響起糕档,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拌喉,沒想到半個月后速那,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尿背,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年端仰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片田藐。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡荔烧,死狀恐怖吱七,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鹤竭,我是刑警寧澤踊餐,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站臀稚,受9級特大地震影響吝岭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吧寺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一窜管、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稚机,春花似錦幕帆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谋币,卻和暖如春仗扬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蕾额。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工早芭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诅蝶。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓退个,卻偏偏與公主長得像,于是被迫代替她去往敵國和親调炬。 傳聞我的和親對象是個殘疾皇子语盈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,346評論 0 35
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,291評論 0 6
  • 1.寫一個NSString類的實(shí)現(xiàn) +(id)initWithCString:(c*****t char *)nu...
    韓七夏閱讀 3,752評論 2 37
  • 題記:在簡書上看到一篇涉及孩子英語學(xué)習(xí)的文章缰泡,說實(shí)話我挺不屑的刀荒,總是感覺別人連英語發(fā)音都不準(zhǔn),如何輔導(dǎo)好自己的孩子...
    程獅子閱讀 479評論 0 2
  • 過完這個中秋棘钞,就要高考了缠借。 簡單點(diǎn)說,就是要總結(jié)16年學(xué)的知識 然后在戰(zhàn)場上大干一場 也許是失常宜猜,或者是超常 但那...
    夢瓏紫藍(lán)閱讀 212評論 7 4