国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何實(shí)現(xiàn)動(dòng)態(tài)分配,malloc,realloc,calloc的使用方法,數(shù)組,鏈表,結(jié)構(gòu)體實(shí)現(xiàn)動(dòng)態(tài)分配(含代碼實(shí)現(xiàn))

這篇具有很好參考價(jià)值的文章主要介紹了如何實(shí)現(xiàn)動(dòng)態(tài)分配,malloc,realloc,calloc的使用方法,數(shù)組,鏈表,結(jié)構(gòu)體實(shí)現(xiàn)動(dòng)態(tài)分配(含代碼實(shí)現(xiàn))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

如何實(shí)現(xiàn)動(dòng)態(tài)分配,malloc,realloc,calloc的使用方法,數(shù)組,鏈表,結(jié)構(gòu)體實(shí)現(xiàn)動(dòng)態(tài)分配(含代碼實(shí)現(xiàn))

??【數(shù)據(jù)結(jié)構(gòu)與算法】專(zhuān)題正在持續(xù)更新中,各種數(shù)據(jù)結(jié)構(gòu)的創(chuàng)建原理與運(yùn)用?,經(jīng)典算法的解析?都在這兒,歡迎大家前往訂閱本專(zhuān)題,獲取更多詳細(xì)信息哦??????

??本系列專(zhuān)欄 - ?數(shù)據(jù)結(jié)構(gòu)與算法_勾欄聽(tīng)曲_0

??歡迎大家 ??? ?點(diǎn)贊?? ?評(píng)論?? ?收藏??

??個(gè)人主頁(yè) - 勾欄聽(tīng)曲_0的博客??

??希望本文能對(duì)你有所幫助,如有不足請(qǐng)指正,共同進(jìn)步吧??

??善治病者,必醫(yī)其受病之處;善救弊者,必塞其起弊之源。??

目錄

動(dòng)態(tài)分配

意義

動(dòng)態(tài)分配與靜態(tài)分配內(nèi)存的異同于優(yōu)缺點(diǎn)

何時(shí)需要?jiǎng)討B(tài)分配

動(dòng)態(tài)分配函數(shù)

malloc

calloc

realloc

三者的異同

數(shù)組中的動(dòng)態(tài)分配

結(jié)構(gòu)體中的動(dòng)態(tài)分配

鏈表中的動(dòng)態(tài)分配


動(dòng)態(tài)分配

意義

????????在計(jì)算機(jī)科學(xué)中,?動(dòng)態(tài)內(nèi)存分配(Dynamic memory allocation)又稱(chēng)為堆內(nèi)存分配,是指計(jì)算機(jī)程序在運(yùn)行期中分配使用內(nèi)存。它可以當(dāng)成是一種分配有限內(nèi)存資源所有權(quán)的方法。

????????動(dòng)態(tài)分配的內(nèi)存在被程序員明確釋放或垃圾回收之前一直有效。與靜態(tài)內(nèi)存分配的區(qū)別在于沒(méi)有一個(gè)固定的生存期。這樣被分配的對(duì)象稱(chēng)之為有一個(gè)“動(dòng)態(tài)生存期”。

????????動(dòng)態(tài)分配的意義是為了讓程序能夠根據(jù)運(yùn)行時(shí)的需要,靈活地分配和釋放內(nèi)存空間,以提高內(nèi)存利用率和程序的功能性。動(dòng)態(tài)分配可以解決以下問(wèn)題:

????????當(dāng)程序運(yùn)行時(shí),無(wú)法確定變量(如數(shù)組、結(jié)構(gòu)體、鏈表等)的大小或個(gè)數(shù)時(shí),靜態(tài)分配的內(nèi)存空間可能不夠或浪費(fèi),而動(dòng)態(tài)分配可以根據(jù)實(shí)際情況分配合適的空間。

????????當(dāng)程序運(yùn)行時(shí),需要頻繁地創(chuàng)建和銷(xiāo)毀變量時(shí),靜態(tài)分配的內(nèi)存空間可能造成內(nèi)存碎片或不足,而動(dòng)態(tài)分配可以及時(shí)釋放不用的空間,避免內(nèi)存泄漏。

????????當(dāng)程序運(yùn)行時(shí),需要將變量的生命周期延長(zhǎng)到函數(shù)調(diào)用結(jié)束后時(shí),靜態(tài)分配的局部變量會(huì)在函數(shù)返回時(shí)被銷(xiāo)毀,而動(dòng)態(tài)分配的變量可以保持有效,直到被釋放。

動(dòng)態(tài)分配與靜態(tài)分配內(nèi)存的異同于優(yōu)缺點(diǎn)

????????動(dòng)態(tài)分配與靜態(tài)分配的異同與優(yōu)缺點(diǎn)如下:

????????異:

????????????????靜態(tài)分配是編譯器完成的,比如局部變量的分配。動(dòng)態(tài)分配是程序運(yùn)行時(shí)由程序員通過(guò)函數(shù)(如malloc、calloc等)進(jìn)行分配。

????????????????靜態(tài)分配的內(nèi)存空間是在棧上分配的,生命周期和作用域受函數(shù)限制。動(dòng)態(tài)分配的內(nèi)存空間是在堆上分配的,生命周期和作用域由程序員控制。

????????????????靜態(tài)分配的內(nèi)存空間是連續(xù)的,大小和個(gè)數(shù)在編譯時(shí)確定。動(dòng)態(tài)分配的內(nèi)存空間是不連續(xù)的,大小和個(gè)數(shù)在運(yùn)行時(shí)確定。

????????同:

????????????????靜態(tài)分配和動(dòng)態(tài)分配都是為了給變量或數(shù)據(jù)結(jié)構(gòu)分配內(nèi)存空間,以便存儲(chǔ)數(shù)據(jù)和信息1。
靜態(tài)分配和動(dòng)態(tài)分配都需要遵循一些規(guī)則和約束,以保證程序的正確性和安全性。

????????優(yōu)缺點(diǎn):

????????????????靜態(tài)分配的優(yōu)點(diǎn)是簡(jiǎn)單、快速、安全,不需要手動(dòng)管理內(nèi)存空間。缺點(diǎn)是浪費(fèi)內(nèi)存空間,不能適應(yīng)程序運(yùn)行時(shí)的變化。

????????????????動(dòng)態(tài)分配的優(yōu)點(diǎn)是節(jié)省內(nèi)存空間,能適應(yīng)程序運(yùn)行時(shí)的變化,能創(chuàng)建復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。缺點(diǎn)是復(fù)雜、慢速、危險(xiǎn),需要手動(dòng)管理內(nèi)存空間。

何時(shí)需要?jiǎng)討B(tài)分配

????????動(dòng)態(tài)分配內(nèi)存的目的是為了節(jié)省內(nèi)存空間,提高內(nèi)存利用率,以及適應(yīng)程序運(yùn)行時(shí)的不確定性1。一般來(lái)說(shuō),以下情況需要?jiǎng)討B(tài)分配內(nèi)存:

????????????????當(dāng)程序運(yùn)行時(shí),無(wú)法確定變量(如數(shù)組、結(jié)構(gòu)體、鏈表等)的大小或個(gè)數(shù)時(shí),需要?jiǎng)討B(tài)分配內(nèi)存來(lái)根據(jù)實(shí)際情況分配合適的空間。

????????????????當(dāng)程序運(yùn)行時(shí),需要頻繁地創(chuàng)建和銷(xiāo)毀變量時(shí),需要?jiǎng)討B(tài)分配內(nèi)存來(lái)避免靜態(tài)分配的內(nèi)存浪費(fèi)或不足。

????????????????當(dāng)程序運(yùn)行時(shí),需要將變量的生命周期延長(zhǎng)到函數(shù)調(diào)用結(jié)束后時(shí),需要?jiǎng)討B(tài)分配內(nèi)存來(lái)保持變量的有效性。


但是需要注意的是,動(dòng)態(tài)分配由他的好處,同時(shí)也有一些弊端:

動(dòng)態(tài)分配內(nèi)存的好處和壞處如下:

????????好處:

????????????????可以根據(jù)程序運(yùn)行時(shí)的需要,靈活地分配和釋放內(nèi)存空間,提高內(nèi)存利用率。

????????????????可以創(chuàng)建一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如鏈表、樹(shù)、圖等,實(shí)現(xiàn)更多的功能。

????????????????可以將變量的生命周期延長(zhǎng)到函數(shù)調(diào)用結(jié)束后,避免局部變量的作用域限制。

????????壞處:

????????????????需要手動(dòng)管理內(nèi)存空間,容易出現(xiàn)內(nèi)存泄漏、內(nèi)存碎片、內(nèi)存溢出等問(wèn)題。

????????????????動(dòng)態(tài)分配的內(nèi)存空間通常不連續(xù),可能影響程序的性能和效率。

????????????????動(dòng)態(tài)分配的內(nèi)存空間可能被其他程序或進(jìn)程占用或修改,導(dǎo)致程序出錯(cuò)或崩潰

動(dòng)態(tài)分配函數(shù)

malloc

? ? ? ? 頭文件:

#include <stdlib.h>  

? ? ? ? 語(yǔ)法格式:

void *malloc(size_t size);

? ? ? ? 用法舉例:

#include <stdlib.h>  
  
int main() {  
    int *ptr;  
    int n;  
  
    // 動(dòng)態(tài)分配內(nèi)存空間  
    ptr = (int*) malloc(sizeof(int) * n);  
  
    // 輸出動(dòng)態(tài)分配的內(nèi)存空間大小  
    printf("Dynamically allocated memory size: %d\n", n);  
  
    // 輸出動(dòng)態(tài)分配的內(nèi)存空間地址  
    printf("Dynamically allocated memory address: %p\n", ptr);  
  
    // 輸出動(dòng)態(tài)分配的內(nèi)存空間指針  
    printf("Dynamically allocated memory pointer: %p\n", ptr);  
  
    // 釋放動(dòng)態(tài)分配的內(nèi)存空間  
    free(ptr);  
  
    return 0;  
}

calloc

? ? ? ? 頭文件:

#include <stdlib.h>  

? ? ? ? 語(yǔ)法格式:

????????????????其中,num?表示要分配的元素個(gè)數(shù),size?表示每個(gè)元素的大小。

void* calloc(size_t num, size_t size);

? ? ? ? 用法舉例:

????????????????在這個(gè)例子中,calloc?函數(shù)接受兩個(gè)參數(shù),num?表示要分配的元素個(gè)數(shù),size?表示每個(gè)元素的大小。函數(shù)返回一個(gè)指向分配起始地址的指針,如果分配不成功,則返回?NULL。

其中,num 表示要分配的元素個(gè)數(shù),size 表示每個(gè)元素的大小。

? ? ? ? 注意:

?????????????????calloc?函數(shù)在分配內(nèi)存時(shí)會(huì)先檢查分配的內(nèi)存大小是否足夠,如果不足,則會(huì)拋出?malloc?函數(shù)的?malloc_error?異常。因此,在使用?calloc?函數(shù)時(shí),需要確保分配的內(nèi)存大小足夠,否則可能會(huì)導(dǎo)致程序崩潰或產(chǎn)生不可預(yù)測(cè)的行為。

realloc

? ? ? ? 頭文件:

#include <malloc .h>

? ? ? ? 語(yǔ)法格式:

????????????????其中,ptr?是要重新分配內(nèi)存空間的指針,size?是要分配的內(nèi)存塊的大小。realloc()?函數(shù)會(huì)在程序運(yùn)行時(shí)動(dòng)態(tài)計(jì)算需要分配的內(nèi)存大小,并返回一個(gè)指向動(dòng)態(tài)分配的內(nèi)存塊的指針。如果在分配內(nèi)存時(shí)發(fā)生錯(cuò)誤,realloc()?函數(shù)將返回一個(gè)空指針。

void *realloc(void *ptr, size_t size);

三者的異同

相似之處:

  • malloccalloc都可以用于分配動(dòng)態(tài)內(nèi)存空間,并且都需要傳入兩個(gè)參數(shù),第一個(gè)參數(shù)是要分配的元素個(gè)數(shù),第二個(gè)參數(shù)是每個(gè)元素的大小。
  • malloccalloc都會(huì)將分配的內(nèi)存空間初始化為0,如果分配的內(nèi)存原來(lái)已經(jīng)被分配過(guò),則其中可能會(huì)遺留有各種各樣的數(shù)據(jù)。
  • malloccalloc都可以用于分配指定大小的內(nèi)存空間,并且返回類(lèi)型都是void*。

不同之處:

  • malloc是從系統(tǒng)堆上分配內(nèi)存的,而callocrealloc都是在程序運(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存空間的。
  • malloc返回的是指向動(dòng)態(tài)分配內(nèi)存空間的指針,而callocrealloc返回的是指向分配的內(nèi)存空間的指針。
  • malloccalloc都可以用于擴(kuò)大或縮小分配的內(nèi)存空間,而realloc只能用于擴(kuò)大分配的內(nèi)存空間。
  • malloccalloc的參數(shù)類(lèi)型不同,malloc接受的是unsigned int類(lèi)型的參數(shù),而callocrealloc接受的是size_t類(lèi)型的參數(shù)。
  • malloccalloc都需要對(duì)返回值進(jìn)行判空,而realloc不需要。
  • malloc是一個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù),而callocreallocrealloc都是第三方庫(kù)函數(shù)。

數(shù)組中的動(dòng)態(tài)分配

  • 聲明一個(gè)指針或指向指針的指針,作為動(dòng)態(tài)數(shù)組的起始地址。
  • 使用 malloc() 或 calloc() 函數(shù)為數(shù)組分配內(nèi)存空間,根據(jù)數(shù)組的維數(shù)和元素類(lèi)型確定所需的字節(jié)數(shù)。
  • 使用循環(huán)或其他方式來(lái)為數(shù)組中的每個(gè)元素進(jìn)行賦值和訪問(wèn),注意使用下標(biāo)或指針運(yùn)算符。
  • 使用 free() 函數(shù)釋放數(shù)組所占用的內(nèi)存空間,避免內(nèi)存泄漏。
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int *array = NULL; // 聲明一個(gè)整型指針
    int len = 10; // 數(shù)組長(zhǎng)度
    array = (int *)malloc(len * sizeof(int)); // 為數(shù)組分配內(nèi)存空間
    if (array == NULL) // 檢查是否分配成功
    {
        printf("動(dòng)態(tài)申請(qǐng)內(nèi)存失?。n");
        exit(1);
    }
    for (int i = 0; i < len; i++) // 為數(shù)組賦值
    {
        array[i] = i + 1;
    }
    for (int i = 0; i < len; i++) // 打印數(shù)組元素的值和地址
    {
        printf("array[%d] = %d, &array[%d] = %p\n", i, array[i], i, &array[i]);
    }
    free(array); // 釋放數(shù)組內(nèi)存
    return 0;
}

結(jié)構(gòu)體中的動(dòng)態(tài)分配

????????在上面的代碼中,我們定義了一個(gè)Point結(jié)構(gòu)體,它包含兩個(gè)整型變量xy。然后,我們使用malloc函數(shù)動(dòng)態(tài)分配了一個(gè)大小為2Point類(lèi)型的內(nèi)存空間,并將其地址賦值給指針變量p.z。最后,我們輸出了動(dòng)態(tài)分配的內(nèi)存空間的大小、地址和指針。

#include <stdio.h>  
  
typedef struct {  
    int x;  
    int y;  
} Point;  
  
int main() {  
    Point p;  
    p.x = 10;  
    p.y = 20;  
  
    // 動(dòng)態(tài)分配內(nèi)存空間  
    p.z = (Point*) malloc(sizeof(Point) * 2);  
  
    // 輸出動(dòng)態(tài)分配的內(nèi)存空間大小  
    printf("Dynamically allocated memory size: %d\n", sizeof(Point) * 2);  
  
    // 輸出動(dòng)態(tài)分配的內(nèi)存空間地址  
    printf("Dynamically allocated memory address: %p\n", p.z);  
  
    // 輸出動(dòng)態(tài)分配的內(nèi)存空間指針  
    printf("Dynamically allocated memory pointer: %p\n", p.z);  
  
    // 釋放動(dòng)態(tài)分配的內(nèi)存空間  
    free(p.z);  
  
    return 0;  
}

鏈表中的動(dòng)態(tài)分配

????????在上面的代碼中,我們定義了一個(gè)Node結(jié)構(gòu)體,它包含一個(gè)整型變量data和一個(gè)指向下一個(gè)節(jié)點(diǎn)的指針next。然后,我們使用createNode函數(shù)動(dòng)態(tài)分配了一個(gè)大小為2Node類(lèi)型的內(nèi)存空間,并將其地址賦值給指針變量p.z。最后,我們輸出了動(dòng)態(tài)分配的內(nèi)存空間的大小、地址和指針。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-426761.html

#include <stdio.h>  
#include <stdlib.h>  
  
typedef struct Node {  
    int data;  
    struct Node* next;  
} Node;  
  
Node* createNode(int data) {  
    Node* newNode = (Node*) malloc(sizeof(Node));  
    newNode->data = data;  
    newNode->next = NULL;  
    return newNode;  
}  
  
void printList(Node* head) {  
    while (head != NULL) {  
        printf("%d ", head->data);  
        head = head->next;  
    }  
    printf("\n");  
}  
  
int main() {  
    Node* head = createNode(1);  
    head->next = createNode(2);  
    head->next->next = createNode(3);  
    head->next->next->next = createNode(4);  
  
    printList(head);  
  
    // 動(dòng)態(tài)分配內(nèi)存空間  
    head->next->next->next = createNode(5);  
  
    printList(head);  
  
    return 0;  
}

到了這里,關(guān)于如何實(shí)現(xiàn)動(dòng)態(tài)分配,malloc,realloc,calloc的使用方法,數(shù)組,鏈表,結(jié)構(gòu)體實(shí)現(xiàn)動(dòng)態(tài)分配(含代碼實(shí)現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C語(yǔ)言】動(dòng)態(tài)內(nèi)存管理(malloc,free,calloc,realloc,柔性數(shù)組)

    【C語(yǔ)言】動(dòng)態(tài)內(nèi)存管理(malloc,free,calloc,realloc,柔性數(shù)組)

    本章重點(diǎn) 為什么存在動(dòng)態(tài)內(nèi)存管理 動(dòng)態(tài)內(nèi)存函數(shù)的介紹 malloc free calloc realloc 常見(jiàn)的動(dòng)態(tài)內(nèi)存錯(cuò)誤 幾個(gè)經(jīng)典的筆試題 柔性數(shù)組 我們已經(jīng)掌握的內(nèi)存開(kāi)辟方式有: int val = 20; //在??臻g上開(kāi)辟四個(gè)字節(jié) char arr[10] = {0}; 在??臻g上開(kāi)辟十個(gè)字節(jié)的連續(xù)空間 但是上述開(kāi)辟空間的方

    2024年02月03日
    瀏覽(48)
  • C語(yǔ)言——?jiǎng)討B(tài)內(nèi)存管理(malloc, calloc, realloc, free, 柔性數(shù)組詳解)

    C語(yǔ)言——?jiǎng)討B(tài)內(nèi)存管理(malloc, calloc, realloc, free, 柔性數(shù)組詳解)

    我們以往定義數(shù)組,都是這么定義的: 以這種方式開(kāi)辟空間有兩個(gè)特點(diǎn): 空間開(kāi)辟的大小是固定的 數(shù)組在聲明的時(shí)候,必須指定數(shù)組的長(zhǎng)度,它所需要的內(nèi)存在編譯時(shí)分配 因此就導(dǎo)致了這樣一個(gè)現(xiàn)象:我們無(wú)法在后續(xù)的過(guò)程中修改數(shù)組的大小,這是一個(gè)十分麻煩的事情 而

    2024年02月16日
    瀏覽(25)
  • C語(yǔ)言中靈活多變的動(dòng)態(tài)內(nèi)存,malloc函數(shù) && free函數(shù)&& calloc函數(shù) && realloc函數(shù)

    C語(yǔ)言中靈活多變的動(dòng)態(tài)內(nèi)存,malloc函數(shù) && free函數(shù)&& calloc函數(shù) && realloc函數(shù)

    鐵子們好??!今天阿輝給大家講一下C語(yǔ)言里面特別重要的一塊知識(shí)——?jiǎng)討B(tài)內(nèi)存管理,為什么說(shuō)它重要呢?相信大家在使用數(shù)組時(shí)都遇到過(guò)數(shù)字開(kāi)辟空間太大或者太小的情況,這是很尷尬的因?yàn)閿?shù)組空間一旦確定就難以擴(kuò)大或者縮小。而今天的動(dòng)態(tài)內(nèi)存管理將幫我們很好的解

    2024年02月03日
    瀏覽(19)
  • calloc、malloc、realloc函數(shù)的區(qū)別及用法

    calloc、malloc、realloc函數(shù)的區(qū)別及用法

    三者都是分配內(nèi)存,都是stdlib.h庫(kù)里的函數(shù),但是也存在一些差異。 (1)malloc函數(shù)。其原型void *malloc(unsigned int num_bytes); num_byte為要申請(qǐng)的空間大小,需要我們手動(dòng)的去計(jì)算,如int *p = (int )malloc(20 sizeof(int)),如果編譯器默認(rèn)int為4字節(jié)存儲(chǔ)的話(huà),那么計(jì)算結(jié)果是80Byte,一次申請(qǐng)

    2024年02月08日
    瀏覽(30)
  • C語(yǔ)言 malloc動(dòng)態(tài)內(nèi)存分配函數(shù)

    malloc函數(shù):malloc時(shí)動(dòng)態(tài)內(nèi)存分配函數(shù),用于申請(qǐng)一塊連續(xù)的指定大小的內(nèi)存塊區(qū)域以void*類(lèi)型返回分配的內(nèi)存區(qū)域地址,就是當(dāng)數(shù)組創(chuàng)建長(zhǎng)度不一定 害怕數(shù)據(jù)存儲(chǔ)不夠或者不能浪費(fèi)時(shí)間 在使用malloc開(kāi)辟空間時(shí),使用完成一定要釋放空間,如果不釋放會(huì)造內(nèi)存泄漏。n在使用ma

    2024年02月07日
    瀏覽(17)
  • 16 malloc 虛擬內(nèi)存分配的調(diào)試(1)

    16 malloc 虛擬內(nèi)存分配的調(diào)試(1)

    呵呵 在 c 語(yǔ)言中 malloc 應(yīng)該是初學(xué)者必須了解的一個(gè)函數(shù)了吧? 但凡 涉及到堆內(nèi)存分配的相關(guān), 必定會(huì)使用到 malloc, realloc, calloc 這幾個(gè)函數(shù)? 其中 malloc 最常見(jiàn), 也是最 實(shí)用? 在 HotspotVM 中也經(jīng)常會(huì)看到 malloc 的身影? 我們這里 來(lái)調(diào)試一下 malloc 的相關(guān)的一些場(chǎng)景? 本文主要的

    2023年04月09日
    瀏覽(22)
  • 從 malloc 分配大塊內(nèi)存失敗 來(lái)簡(jiǎn)看 linux 內(nèi)存管理

    從 malloc 分配大塊內(nèi)存失敗 來(lái)簡(jiǎn)看 linux 內(nèi)存管理

    應(yīng)用進(jìn)程 malloc 返回了null,但是觀察到的os 的free內(nèi)存還有較大的余量 ,很奇怪為什么會(huì)這樣? 不可能是oom導(dǎo)致的(當(dāng)然也沒(méi)有 os 的oom 日志),free還有余量,系統(tǒng)也沒(méi)有cgroup的應(yīng)用隔離。 我們linux上使用的庫(kù)函數(shù) malloc 基本都是用glibc庫(kù)實(shí)現(xiàn)的malloc函數(shù)(當(dāng)然如果binary 鏈接

    2024年02月08日
    瀏覽(19)
  • IP 地址如何進(jìn)行動(dòng)態(tài)分配?

    IP 地址如何進(jìn)行動(dòng)態(tài)分配?

    由于 IP 地址資源的有限性,大部分用戶(hù)上網(wǎng)都是使用動(dòng)態(tài) IP 地址,而不是靜態(tài) IP 地址。動(dòng)態(tài) IP 地址指的是在需要的時(shí)候才進(jìn)行 IP 地址分配的方式,而靜態(tài) IP 地址是固定分配一個(gè) IP 地址,每次都用這一個(gè)地址。因此,IP 地址動(dòng)態(tài)分配是一種普遍的網(wǎng)絡(luò)配置方式。 IP 地址動(dòng)

    2024年01月21日
    瀏覽(20)
  • 如何在C中動(dòng)態(tài)分配二維數(shù)組

    如何在C中動(dòng)態(tài)分配二維數(shù)組

    在C語(yǔ)言中如何動(dòng)態(tài)申請(qǐng)連續(xù)的二維數(shù)組??梢圆捎枚嗌暾?qǐng)一些指針,然后這一些指針?lè)謩e指向后面數(shù)據(jù)區(qū)中對(duì)應(yīng)的位置,如一個(gè)3*4的int類(lèi)型數(shù)組,我們先申請(qǐng)大小為sizeof(int*) * 3 + 3 * 4 * sizeof(int)的一維數(shù)組設(shè)為arr。然后arr[0]存放指向arr + sizeof(int*) * 3這個(gè)位置的指針,arr[1]存放

    2023年04月27日
    瀏覽(20)
  • 用指針實(shí)現(xiàn)內(nèi)存動(dòng)態(tài)分配

    導(dǎo)引 :已知:變量在使用前必須被定義且安排好存儲(chǔ)空間。且變量有這么一些分類(lèi):全局變量、靜態(tài)局部變量【它們的儲(chǔ)存一般是在編譯時(shí)確定,在程序開(kāi)始執(zhí)行前完成?!孔詣?dòng)變量【在執(zhí)行進(jìn)入變量定義所在的復(fù)合語(yǔ)句時(shí)為它們分配存儲(chǔ),變量的大小也是靜態(tài)確定的。臨時(shí)

    2023年04月09日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包