c++內存管理(上)

目錄

引入

分析

說明

C語言中動態內存管理方式

C++內存管理方式

new/delete操作內置類型

new和delete操作自定義類型


引入

我們先來看下面的一段代碼和相關問題
int globalVar = 1;
static int staticGlobalVar = 1;
void Test()
{
static int staticVar = 1;
int localVar = 1;
int num1[10] = { 1, 2, 3, 4 };
char char2[] = "abcd";
const char* pChar3 = "abcd";
int* ptr1 = (int*)malloc(sizeof(int) * 4);
int* ptr2 = (int*)calloc(4, sizeof(int));
int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4);
free(ptr1);
free(ptr3);
}
1. 選擇題:
選項 : A . B . C . 數據段 ( 靜態區 ) D . 代碼段 ( 常量區 )
globalVar 在哪里? ____ staticGlobalVar 在哪里? ____
staticVar 在哪里? ____ localVar 在哪里? ____
num1 在哪里? ____
char2 在哪里? ____ * char2 在哪里? ___
pChar3 在哪里? ____ * pChar3 在哪里? ____
ptr1 在哪里? ____ * ptr1 在哪里? ____
2. 填空題:
sizeof ( num1 ) = ____ ;
sizeof ( char2 ) = ____ ; strlen ( char2 ) = ____ ;
sizeof ( pChar3 ) = ____ ; strlen ( pChar3 ) = ____ ;
sizeof ( ptr1 ) = ____ ;
3. sizeof strlen 區別?

分析

全局變量與static變量均在靜態區(static變量在第一次載入時初始化)

字符串均在常量區,如果是采用數組方式,那么就是從常量區將字符串拷貝到棧區中,因此對字符串數組存儲在棧中,而下面的字符串指針指向字符串所存儲的位置,字符串本身存儲在常量區中

注意:const char* ptr="abcd",*ptr在常量區,因為*ptr無法被修改,因此會直接將常量區的位置傳遞給指針

各種變量,包括int char 指針類型變量都存儲在棧中

sizeof如果是整個數組則返回數組大小,如果是其他類型變量則返回變量大小

strlen返回的是字符串長度從第一個元素到'\0'之前的元素個數

說明

1. 又叫堆棧 -- 非靜態局部變量 / 函數參數 / 返回值等等,棧是向下增長的。
2. 內存映射段 是高效的 I/O 映射方式,用于裝載一個共享的動態內存庫。用戶可使用系統接口創建共享共 享內存,做進程間通信。(linux部分會講)
3. 用于程序運行時動態內存分配,堆是可以上增長的。
4. 數據段 -- 存儲全局數據和靜態數據。
5. 代碼段 -- 可執行的代碼 / 只讀常量。

C語言中動態內存管理方式

malloc/calloc/realloc/free
void Test ()
{
int* p1 = (int*) malloc(sizeof(int));
free(p1);
// 1.malloc/calloc/realloc的區別是什么?
int* p2 = (int*)calloc(4, sizeof (int));
int* p3 = (int*)realloc(p2, sizeof(int)*10);
// 這里需要free(p2)嗎?
free(p3 );
}

C++內存管理方式

C 語言內存管理方式在 C++ 中可以繼續使用,但有些地方就無能為力,而且使用起來比較麻煩,因此 C++ 又提 出了自己的內存管理方式:通過 new delete 操作符進行動態內存管理

new/delete操作內置類型

void Test()
{
// 動態申請一個int類型的空間
int* ptr4 = new int;
// 動態申請一個int類型的空間并初始化為10
int* ptr5 = new int(10);
// 動態申請10個int類型的空間
int* ptr6 = new int[10];
delete ptr4;
delete ptr5;
delete[] ptr6;
}

注意:申請和釋放單個元素的空間,使用 new delete 操作符,申請和釋放連續的空間,使用 new[] delete[] ,注意:匹配起來使用。

newdelete操作自定義類型

class A
{
public:
A(int a = 0)
: _a(a)
{
cout << "A():" << this << endl;
}
~A()
{
cout << "~A():" << this << endl;
}
private:
int _a;
};
int main()
{
// new/delete 和 malloc/free最大區別是 new/delete對于【自定義類型】除了開空間還會調用構
造函數和析構函數
A* p1 = (A*)malloc(sizeof(A));
A* p2 = new A(1);
free(p1);
delete p2;
// 內置類型是幾乎是一樣的
int* p3 = (int*)malloc(sizeof(int)); // C
free(p3);
delete p4;
A* p5 = (A*)malloc(sizeof(A)*10);
A* p6 = new A[10];
free(p5);
delete[] p6;
return 0;
}
注意:在申請自定義類型的空間時, new 會調用構造函數, delete 會調用析構函數,而 malloc free 不會

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43929.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43929.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43929.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

集訓day3:并查集

一、目錄 1.并查集模版 2.并查集的理解和應用 二、正文 1.并查集模版 P3367 【模板】并查集 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 2.并查集的理解與應用 (1).并查集與聯通塊數量 P1197 [JSOI2008] 星球大戰 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) P1656 炸…

數圖助推朝陽佳惠遼寧華聯開啟數字化導航、精細化管理新紀元!

近期&#xff0c;遼寧省著名零售企業朝陽佳惠與遼寧華聯&#xff0c;秉持創新精神&#xff0c;大膽嘗試&#xff0c;在品類空間管理方面推出了創新舉措。引入了先進的數圖可視化陳列管理系統&#xff0c;通過智能化、直觀化的方式優化商品布局。此舉不僅大幅提高了商品管理的效…

去除各種軟件彈窗教程

清羽彈窗 在mutil/OnlineDialog/onPostExecute前 添加return-void Arm彈窗 第一步&#xff0c;提取安裝包 第二步&#xff0c;搜索代碼Ljava/io/DataOutputStream;->flush()V 第三步&#xff0c;往上看找到 .registers 10 在下面加return-void 云注入彈窗 第一種方法:dex搜…

Sql 導入到 Excel 工具

Sql 導入到 Excel 工具 這個VBA宏的步驟如下&#xff1a; 通過文件對話框選擇SQL文件。讀取文件內容。解析文件中的每一行&#xff0c;如果包含“insert into”&#xff0c;則提取表名。檢查是否已經存在以表名命名的工作表&#xff0c;如果不存在則創建新的工作表。將數據插…

element-ui封裝分頁組件:實現首頁、上一頁、下一頁、末頁、跳轉按鈕

首頁、上一頁、下一頁、末頁、跳轉按鈕 因為el-pagination只有一個插槽&#xff0c;所以通過兩個el-pagination插槽分別加入首頁、末頁按鈕&#xff0c;再拼接這兩個el-pagination的方式來實現首頁、末頁按鈕跳轉按鈕不用加事件&#xff0c;如果el-pagination修改了前往的頁數…

【work】AI八股-神經網絡相關

Deep-Learning-Interview-Book/docs/深度學習.md at master amusi/Deep-Learning-Interview-Book GitHub 網上相關總結&#xff1a; 小菜雞寫一寫基礎深度學習的問題&#xff08;復制大佬的&#xff0c;自己復習用&#xff09; - 知乎 (zhihu.com) CV面試問題準備持續更新貼 …

VOI(Virtual Operating System Infrastructure,虛擬操作系統基礎架構)

VOI&#xff08;Virtual Operating System Infrastructure&#xff0c;虛擬操作系統基礎架構&#xff09;架構在桌面虛擬化領域具有其獨特的優勢&#xff0c;使得它在某些場景下表現尤為出色。以下是幾個具體場景&#xff1a; 1. 重載性能需求場景 表現&#xff1a; 高效利用…

聚類分析方法(二)

目錄 三、層次聚類方法&#xff08;一&#xff09;層次聚類策略&#xff08;二&#xff09;AGNES算法&#xff08;三&#xff09;DIANA算法 四、密度聚類方法&#xff08;一&#xff09;基本概念&#xff08;二&#xff09;算法描述&#xff08;三&#xff09;計算實例&#xf…

Google賬號輸入用戶名和密碼后提醒要到手機通知點是,還要點擊數字,但是我手機收不到

有一些朋友換了一個新的電腦后手機登錄谷歌賬號時&#xff0c;用戶名和密碼都正確輸入以后&#xff0c;第三步彈出一個提示&#xff0c;要在手機上的通知欄點擊是&#xff0c;并且點擊手機上相應的數字才能繼續登錄。 但是自己的手機上下拉通知欄卻沒有來自谷歌的通知&#xf…

ADOQuery 查詢MSSQL存儲過程一個莫名其妙的錯誤;

在 SSMS 中執行完成正常的的存儲過程。 也能正常的返回想要的數據&#xff0c;&#xff0c;然后通過 ADO 查詢時&#xff0c;總是提法 某 字段不存在的問題&#xff1b; 此問題困擾了一天。 例如&#xff08;當然&#xff0c;實際數據結構比下面舉例的復雜&#xff09;&…

C++八股(二)之C++11新特性

一、C++11有什么新特性?? 自動類型推導(Type Inference):引入了 auto 關鍵字,允許編譯器根據初始化表達式的類型自動推導變量的類型。統一的初始化語法(Uniform Initialization Syntax):引入了用花括號 {} 進行初始化的統一語法,可以用于初始化各種類型的對象,包括基…

符號同步、定時同步和載波同步

符號同步、定時同步和載波同步是通信系統中重要的同步技術&#xff0c;它們各自承擔著不同的功能和作用。以下是對這三種同步技術的詳細解釋&#xff1a; 符號同步 定義&#xff1a; 符號同步&#xff0c;也稱為定時恢復或時鐘恢復&#xff0c;是指在數字通信系統中&#xff…

繼承關系中的訪問控制

繼承關系中的訪問控制 類中成員的訪問權限類繼承中的訪問權限派生類向基類轉換的權限問題&#xff08;向上轉型&#xff09;友元在繼承中的訪問權限 類中成員的訪問權限 public&#xff1a;類的對象&#xff08;外部&#xff09;可以訪問&#xff0c;派生類也可以訪問protecte…

LeNet原理及代碼實現

目錄 1.原理及介紹 2.代碼實現 2.1model.py 2.2model_train.py 2.3model.test.py 1.原理及介紹 2.代碼實現 2.1model.py import torch from torch import nn from torchsummary import summaryclass LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__…

nuxt、vue樹形圖d3.js

直接上代碼 //安裝 npm i d3 --save<template><div class"d3"><div :id"id" class"d3-content"></div></div> </template> <script> import * as d3 from "d3";export default {props: {d…

Github Actions 構建Vue3 + Vite項目

本篇文章以自己創建的項目為例&#xff0c;用Github Actions構建。 Github地址&#xff1a;https://github.com/ling08140814/myCarousel 訪問地址&#xff1a;https://ling08140814.github.io/myCarousel/ 具體步驟&#xff1a; 1、創建一個Vue3的項目&#xff0c;并完成代…

接口基礎知識1:認識接口

課程大綱 一、定義 接口&#xff1a;外部與系統之間、內部各子系統之間的交互點。 比如日常使用的電腦&#xff0c;有電源接口、usb接口、耳機接口、顯示器接口等&#xff0c;分別可以實現&#xff1a;與外部的充電、文件數據傳輸、聲音輸入輸出、圖像輸入輸出等功能。 接口的本…

262個地級市-市場潛力指數(do文件+原始文件)

全國262個地級市-市場潛力指數&#xff08;市場潛力計算方法代碼數據&#xff09;_市場潛力數據分析資源-CSDN文庫 市場潛力指數&#xff1a;洞察未來發展的指南針 市場潛力指數是一個綜合性的評估工具&#xff0c;它通過深入分析市場需求、競爭環境、政策支持和技術創新等多個…

面向字節流傳輸數據

當提到“傳輸數據面向字節流”&#xff0c;這是指在網絡通信中&#xff0c;數據被視作一連串的無結構字節&#xff0c;而不是按照特定的數據塊或記錄進行傳輸。這種傳輸方式是面向傳輸層協議&#xff08;如TCP&#xff09;的一個特性&#xff0c;它允許數據以連續的字節流形式在…

phpstudy框架,window平臺,如何開端口給局域網訪問?

Windows平臺上使用phpstudy框架開端口給同事訪問&#xff0c;主要涉及到幾個步驟&#xff1a;查看并確認本機IP地址、配置phpstudy及網站項目、開放防火墻端口以及確保同事能夠通過局域網訪問。以下是詳細的步驟說明&#xff1a; 1. 查看并確認本機IP地址 首先&#xff0c;需…