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

當前位置: 首頁 > news >正文

溫州網(wǎng)站制作多少錢全網(wǎng)營銷公司

溫州網(wǎng)站制作多少錢,全網(wǎng)營銷公司,做電影網(wǎng)站放搶先版,沈陽健網(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++基礎系列專欄
    😃C語言基礎系列
    😃C++大佬養(yǎng)成攻略

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

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

基本概念理解

棧內(nèi)存

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

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

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

堆內(nèi)存

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

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

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

區(qū)別

  • 內(nèi)存****管理:棧內(nèi)存由編譯器自動管理,堆內(nèi)存由程序員手動管理。
  • 作用域:棧內(nèi)存的作用域通常是函數(shù)內(nèi)部,當函數(shù)返回時,棧內(nèi)存會自動被釋放;堆內(nèi)存的作用域由程序員控制,只要程序員不釋放,內(nèi)存就會一直存在。
  • 生命周期:棧內(nèi)存的生命周期與函數(shù)執(zhí)行時間相關,函數(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,當函數(shù)返回時,stackVar會自動釋放。

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

練習

  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ū)別。

進階

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

碼字不易,歡迎大家點贊關注評論,謝謝!


C++訓練營

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

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

相關文章:

  • 網(wǎng)站備案 godaddyseo公司上海牛巨微
  • 公司網(wǎng)站建設費屬于什么費用網(wǎng)站服務器是什么意思
  • 做返利網(wǎng)站怎麼網(wǎng)絡推廣費用預算表
  • 大連在哪個網(wǎng)站做網(wǎng)上核名鄭州seo公司哪家好
  • 技術支持:淄博網(wǎng)站建設濰坊自動seo
  • 線上推廣方法有哪些長沙網(wǎng)站seo報價
  • 期貨做程序化回測的網(wǎng)站網(wǎng)站網(wǎng)絡排名優(yōu)化方法
  • 建設綜合信息網(wǎng)站需要多少錢如何廣告推廣
  • 國產(chǎn)一級a做爰片免費網(wǎng)站哪個網(wǎng)站是免費的
  • 網(wǎng)絡營銷模式包括哪些seo網(wǎng)站關鍵詞快速排名
  • 做網(wǎng)站放太多視頻seo項目分析
  • 十堰網(wǎng)站seo方法百度seo關鍵詞優(yōu)化公司
  • 做公司網(wǎng)站一般多少錢免費軟件下載網(wǎng)站有哪些
  • 集團網(wǎng)站建設方案書游戲推廣員是違法的嗎
  • 軟件開發(fā)步驟流程鄭州見效果付費優(yōu)化公司
  • 廈門 微網(wǎng)站制作企業(yè)推廣策劃書
  • 做寵物食品的網(wǎng)站優(yōu)化落實疫情防控新十條
  • 上傳了網(wǎng)站源碼怎么做新聞最新熱點
  • 桓臺網(wǎng)站開發(fā)廣州:推動優(yōu)化防控措施落地
  • 中國互聯(lián)網(wǎng)網(wǎng)站性能丈哥seo博客工具
  • 錦州網(wǎng)站建設多少錢網(wǎng)站排名掉了怎么恢復
  • wordpress 地址 .html臺州seo
  • 別人抄襲網(wǎng)站設計怎么辦設計師必備的6個網(wǎng)站
  • 尋花問柳一家專注做男人喜愛的網(wǎng)站什么網(wǎng)站推廣比較好
  • 諸城盟族網(wǎng)站建設北京做網(wǎng)站公司哪家好
  • 網(wǎng)上營銷活動長沙網(wǎng)站seo分析
  • 學校校園網(wǎng)站建設方案上海網(wǎng)站營銷seo方案
  • 做圖片的網(wǎng)站外貿(mào)建站
  • 網(wǎng)站開發(fā)研究背景域名搜索
  • 做網(wǎng)站 警察佛山抖音seo