国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

溫州網(wǎng)站制作多少錢谷歌google 官網(wǎng)下載

溫州網(wǎng)站制作多少錢,谷歌google 官網(wǎng)下載,注冊公司100萬要交多少錢,梅州住房和城鄉(xiāng)建設(shè)部網(wǎng)站博主介紹:程序喵大人 35- 資深C/C/Rust/Android/iOS客戶端開發(fā)10年大廠工作經(jīng)驗嵌入式/人工智能/自動駕駛/音視頻/游戲開發(fā)入門級選手《C20高級編程》《C23高級編程》等多本書籍著譯者更多原創(chuàng)精品文章,首發(fā)gzh,見文末👇&#x1f…

博主介紹:程序喵大人

  • 35- 資深C/C++/Rust/Android/iOS客戶端開發(fā)
  • 10年大廠工作經(jīng)驗
  • 嵌入式/人工智能/自動駕駛/音視頻/游戲開發(fā)入門級選手
  • 《C++20高級編程》《C++23高級編程》等多本書籍著譯者
  • 更多原創(chuàng)精品文章,首發(fā)gzh,見文末
  • 👇👇記得訂閱專欄,以防走丟👇👇
    😃C++基礎(chǔ)系列專欄
    😃C語言基礎(chǔ)系列
    😃C++大佬養(yǎng)成攻略

在C++編程中,內(nèi)存管理是一個至關(guān)重要的概念。

要深入理解內(nèi)存管理,我們肯定要了解堆內(nèi)存和棧內(nèi)存的基本概念、區(qū)別以及它們的動態(tài)分配和釋放方法。還需要深入理解相關(guān)內(nèi)存分配函數(shù)malloc、calloc、realloc的用法。

基本概念理解

棧內(nèi)存

棧內(nèi)存是由編譯器自動管理的內(nèi)存區(qū)域,用于存儲局部變量、函數(shù)參數(shù)和返回地址等。棧內(nèi)存的分配和釋放是自動進(jìn)行的:

  • 當(dāng)函數(shù)被調(diào)用時,局部變量和參數(shù)會被壓入棧中;
  • 當(dāng)函數(shù)返回時,這些局部變量和參數(shù)會被彈出棧并釋放。

棧內(nèi)存具有快速分配和釋放的特點,但其大小是固定的,一般也就8M左右,不能動態(tài)調(diào)整。

堆內(nèi)存

堆內(nèi)存是由程序員手動管理的內(nèi)存區(qū)域,用于動態(tài)分配內(nèi)存。

你通過malloccalloc、realloc等函數(shù)可以在堆上分配內(nèi)存,通過free函數(shù)釋放內(nèi)存。

堆內(nèi)存的大小不固定,可以動態(tài)調(diào)整,但需要程序員負(fù)責(zé)內(nèi)存的管理,容易出現(xiàn)內(nèi)存泄漏等問題,我們常說的內(nèi)存泄露問題指的更多的就是堆內(nèi)存的泄露。

區(qū)別

  • 內(nèi)存****管理:棧內(nèi)存由編譯器自動管理,堆內(nèi)存由程序員手動管理。
  • 作用域:棧內(nèi)存的作用域通常是函數(shù)內(nèi)部,當(dāng)函數(shù)返回時,棧內(nèi)存會自動被釋放;堆內(nèi)存的作用域由程序員控制,只要程序員不釋放,內(nèi)存就會一直存在。
  • 生命周期:棧內(nèi)存的生命周期與函數(shù)執(zhí)行時間相關(guān),函數(shù)執(zhí)行完畢后,棧內(nèi)存會被釋放;堆內(nèi)存的生命周期由程序員控制,直到顯式調(diào)用free函數(shù)釋放內(nèi)存。

堆內(nèi)存的使用

使用malloc動態(tài)分配空間

malloc函數(shù)用于在堆上分配指定大小的內(nèi)存塊。函數(shù)聲明形式為:

void* malloc(size_t size);
  • size:要分配的字節(jié)數(shù)。
  • 返回值:指向分配的內(nèi)存塊的指針,如果分配失敗,返回NULL。

示例代碼:

int* ptr = (int*)malloc(sizeof(int) * 10); // 分配10個int類型的內(nèi)存空間
if (ptr == NULL) {// 處理內(nèi)存分配失敗的情況
}

使用calloc分配并初始化內(nèi)存

calloc函數(shù)用于在堆上分配內(nèi)存并初始化為0。函數(shù)聲明形式為:

void* calloc(size_t num, size_t size);
  • num:要分配的元素個數(shù)。
  • size:每個元素的字節(jié)數(shù)。
  • 返回值:指向分配的內(nèi)存塊的指針,如果分配失敗,返回NULL。

示例代碼:

int* ptr = (int*)calloc(10, sizeof(int)); // 分配10個int類型的內(nèi)存空間,并初始化為0
if (ptr == NULL) {// 處理內(nèi)存分配失敗的情況
}

使用realloc調(diào)整內(nèi)存大小

realloc函數(shù)用于調(diào)整已分配內(nèi)存塊的大小。函數(shù)聲明形式為:

void* realloc(void* ptr, size_t size);
  • ptr:指向要調(diào)整大小的內(nèi)存塊的指針。
  • size:新的內(nèi)存塊大小(字節(jié)數(shù))。
  • 返回值:指向新的內(nèi)存塊的指針,如果分配失敗,返回NULL,原內(nèi)存塊保持不變。

示例代碼:

int* ptr = (int*)malloc(sizeof(int) * 10); // 初始分配10個int類型的內(nèi)存空間
if (ptr == NULL) {// 處理內(nèi)存分配失敗的情況
}// 使用realloc調(diào)整內(nèi)存大小
ptr = (int*)realloc(ptr, sizeof(int) * 20);
if (ptr == NULL) {// 處理內(nèi)存調(diào)整失敗的情況,注意原內(nèi)存塊仍然有效
}

使用free釋放內(nèi)存

free函數(shù)用于釋放之前通過malloc、callocrealloc分配的內(nèi)存空間。函數(shù)聲明形式為:

void free(void* ptr);
  • ptr:指向要釋放的內(nèi)存塊的指針。

示例代碼:

int* ptr = (int*)malloc(sizeof(int) * 10); // 分配10個int類型的內(nèi)存空間
if (ptr == NULL) {// 處理內(nèi)存分配失敗的情況
}// 使用內(nèi)存...free(ptr); // 釋放內(nèi)存
ptr = NULL; // 將指針置為NULL,避免懸掛指針

棧內(nèi)存與堆內(nèi)存的對比

編程實踐展示

以下示例展示了棧內(nèi)存和堆內(nèi)存的不同使用場景和特性:

#include <stdio.h>
#include <stdlib.h>void stackMemoryExample() {int stackVar = 10; // 棧內(nèi)存,函數(shù)返回時自動釋放printf("Stack variable: %d\n", stackVar);
}void heapMemoryExample() {int* heapVar = (int*)malloc(sizeof(int)); // 堆內(nèi)存,需要手動釋放if (heapVar == NULL) {fprintf(stderr, "Memory allocation failed\n");return;}*heapVar = 20;printf("Heap variable: %d\n", *heapVar);free(heapVar); // 釋放堆內(nèi)存heapVar = NULL; // 避免懸掛指針
}int main() {stackMemoryExample(); // 調(diào)用棧內(nèi)存示例函數(shù)heapMemoryExample();  // 調(diào)用堆內(nèi)存示例函數(shù)return 0;
}

其中

stackMemoryExample函數(shù)使用了棧內(nèi)存來存儲局部變量stackVar,當(dāng)函數(shù)返回時,stackVar會自動釋放。

heapMemoryExample函數(shù)則使用堆內(nèi)存來存儲變量heapVar,并通過malloc分配內(nèi)存,通過free釋放內(nèi)存。

練習(xí)

  1. 編寫一個程序,動態(tài)分配一個整型數(shù)組的內(nèi)存空間,用于存儲用戶輸入的5個整數(shù),然后遍歷并打印這些整數(shù)。最后,釋放分配的內(nèi)存。
  2. 編寫一個程序,包含兩個函數(shù)。第一個函數(shù)使用棧內(nèi)存(局部變量)存儲并打印一個整數(shù)數(shù)組;第二個函數(shù)使用堆內(nèi)存動態(tài)分配并存儲用戶輸入的整數(shù)數(shù)組,然后打印并釋放內(nèi)存。通過這兩個函數(shù)的調(diào)用,展示棧內(nèi)存和堆內(nèi)存在使用上的區(qū)別。

進(jìn)階

  1. 為什么malloc時候需要傳遞長度信息,而free時候卻不需要傳遞長度信息呢?會不會多釋放一些內(nèi)存或者少釋放了一些內(nèi)存?
  2. malloc更底層的原理是什么?一次malloc底層都經(jīng)歷了什么?
  3. 棧內(nèi)存和堆內(nèi)存的區(qū)別?
  4. 什么場景下使用棧,什么場景下使用堆呢?
  5. 棧數(shù)組下標(biāo)越界訪問會發(fā)生什么?
  6. 什么是棧溢出?
  7. 了解下常見的棧攻擊手段。

碼字不易,歡迎大家點贊關(guān)注評論,謝謝!


C++訓(xùn)練營

專為校招、社招3年工作經(jīng)驗的同學(xué)打造的1V1 C++訓(xùn)練營,量身定制學(xué)習(xí)計劃、每日代碼review,簡歷優(yōu)化,面試輔導(dǎo),已幫助多名學(xué)員獲得offer!訓(xùn)練營介紹

http://m.aloenet.com.cn/news/42742.html

相關(guān)文章:

  • 手機(jī)html5網(wǎng)站源碼廣告投放的方式有哪些
  • 深圳網(wǎng)站建設(shè)培訓(xùn)班深圳最新通告今天
  • 技術(shù)支持:淄博網(wǎng)站建設(shè)優(yōu)化設(shè)計三年級上冊語文答案
  • 山東省建設(shè)工程招標(biāo)中心網(wǎng)站當(dāng)日網(wǎng)站收錄查詢統(tǒng)計
  • 網(wǎng)站建設(shè)需求分析寫什么茶葉seo網(wǎng)站推廣與優(yōu)化方案
  • 網(wǎng)站程序組成seo搜狗排名點擊
  • 辛集seo網(wǎng)站優(yōu)化電話靠譜的免費建站
  • 建立手機(jī)個人網(wǎng)站營銷網(wǎng)站建設(shè)制作
  • 視頻資源的網(wǎng)站怎么做站長資訊
  • 網(wǎng)站建設(shè)課程設(shè)計內(nèi)容淘寶店鋪轉(zhuǎn)讓價格表
  • wordpress評論框文件采集站seo課程
  • 自己做網(wǎng)站外包百度熱搜高考大數(shù)據(jù)
  • 企業(yè)做網(wǎng)站需要什么軟件百度品牌廣告收費標(biāo)準(zhǔn)
  • 網(wǎng)站制作預(yù)付款會計分錄小程序運(yùn)營推廣公司
  • 大慶網(wǎng)站制作營銷策劃方案包括哪些內(nèi)容
  • 在百度做網(wǎng)站多少錢網(wǎng)站推廣營銷
  • 網(wǎng)站站內(nèi)鏈接濰坊住房公積金管理中心
  • 設(shè)計網(wǎng)頁推薦萬秀服務(wù)不錯的seo推廣
  • 網(wǎng)站的功能和作用百度seo排名帝搜軟件
  • 寶雞哪有有做網(wǎng)站的專業(yè)網(wǎng)絡(luò)推廣公司
  • 網(wǎng)站開發(fā)的工作總結(jié)google搜索優(yōu)化方法
  • 怎么做賭博網(wǎng)站代理承德seo
  • html做網(wǎng)站實戰(zhàn)教程軟文寫作經(jīng)驗是什么
  • 余姚物流做網(wǎng)站鄭州本地seo顧問
  • 醫(yī)院網(wǎng)站建設(shè) 費用百度認(rèn)證官網(wǎng)
  • 四川建設(shè)廳官方網(wǎng)站四庫一平臺網(wǎng)絡(luò)運(yùn)營商
  • 建設(shè)銀行手機(jī)查詢網(wǎng)站合肥seo優(yōu)化排名公司
  • 在北京大學(xué)生做家教的網(wǎng)站關(guān)鍵詞調(diào)詞平臺哪個好
  • 東莞電商頁面設(shè)計公司福州短視頻seo機(jī)會
  • 杭州網(wǎng)站建設(shè)wguser域名歸屬查詢