1. 程式人生 > >C++高階程式設計 第十三章: 有效的記憶體管理

C++高階程式設計 第十三章: 有效的記憶體管理

這一章其實也就講了一下記憶體的具體情況,我覺得一般般,不是很深入,都是些表面

1.如何描述記憶體

我們通常描述一個指標,都是說它指向一個記憶體.但是其實, 指標本身就是在棧裡面而已

棧 ————————————堆

ptr————————————*ptr

這個是什麼意思呢,就是指標只是一個變數而已,它既可以存在於棧中,也可以存在於堆中.
棧: int *ptr = new int;
堆: int *ptr; *ptr=new int; ptr= new int;

多數我們定義棧的指標, 我們只是讓這個棧裡面的指標指向堆裡面的內容而已

2. new和malloc的區別

new的話,除了分配合適大小的記憶體外, 還會呼叫該物件的預設建構函式, 並且成功後返回一個指向該記憶體的指標.在new失敗的同時,會丟擲一個異常
malloc的話, 就只會分配固定大小的記憶體.

相對應的:
delete的話會自動呼叫該物件的解構函式.
free的話 什麼只是清理該記憶體而已.!!!

3.”構造”動態陣列 and “析構”動態陣列

我們在棧內構造陣列通常這樣
int array[10];//
int array[10][10];//

相對應 在堆內
int *array = new int[5];//13
但是二維的時候,1因為申請的記憶體不是連續的,所以不能用int **array = new int[10][10]

所以我們必須先申請第一維的陣列長度, 然後再從第一維裡面的每個元素裡面申請第二維的陣列長度.

int **array = new int[10];
for(int i=0;i<10;i++){
    array[i] = new int[10];//
}

2

相關推薦

C++高階程式設計 十三: 有效記憶體管理

這一章其實也就講了一下記憶體的具體情況,我覺得一般般,不是很深入,都是些表面 1.如何描述記憶體 我們通常描述一個指標,都是說它指向一個記憶體.但是其實, 指標本身就是在棧裡面而已 棧 ————————————堆 ptr————————————*pt

C#高階程式設計讀書筆記

一,結構1.結構struct是儲存線上程棧中,類是儲存在託管堆中,成員變數少的時候可以考慮使用結構2.結構的成員變數不允許直接賦值,結構的建構函式不允許不帶參,實際上結構有一個預設的不帶參的建構函式,會把成員變數賦值,值型別為0,引用型別為null3.結構和int一樣,不用n

C++高階程式設計 : 精通類和物件

本章節最主要講了在類的構造和析構方面, 記憶體是怎樣分配的, 還有幾個關鍵字 : static, const, virtual, inline, 各種過載等等知識點. 1. 究竟什麼時候需要自己寫建構函式, 賦值函式, 拷貝建構函式? 只要你寫的這個類,

C#高階程式設計學習筆記-繼承

1.實現繼承:表示一個型別派生於另一個基型別,他擁有基型別的所有成員變數和方法,因此在需要給現有的型別增肌新的功能後者寫一些共享性的程式碼時很有用。介面繼承:只繼承了函式的簽名沒有整合其他的方法的實現2.C#不支援多重繼承,但是允許派生自多個介面3,把一個基類函式宣告為vir

C++高階程式設計 十五: 處理錯誤

這一章主要講了異常處理的機制, 還有異常的種類, 怎樣設計比較好, 怎樣設計使用異常處理等等. 1.到底什麼是異常 異常是一種機制: 一段程式碼發生了錯誤情況後, 就會通知另外一段程式碼. 然後程式就不會再沿著正常的程式碼路徑前進了, 遇到錯誤的程式碼會

c++ primer 筆記十三拷貝控制

13章 拷貝控制 一個類定義五中特殊成員函式:拷貝建構函式、拷貝賦值運算子、移動建構函式、移動賦值運算子和解構函式。叫做拷貝控制操作。 13.1 拷貝、賦值與銷燬 13.1.1 拷貝建構函式 拷貝函式第一個引數是自身型別的引用,一般是常量引用,且額外引數都有預設值。 拷貝函式通常

C語言程式設計8.3

#include<stdio.h> void DivArray(int *pArray, int n); int main() { int a[] = {2,4,6,8,10,12,14},i; DivArray(a, 7); for (i = 0; i < 7; i

C#高階程式設計 10版 C# 6 & .NET Core 1.0.pdf

  【下載地址】 Visual Studio 2015、ASP.NET Core 1.0和Universal Windows Platform的推出,為開發人員提供了使用C#建立應用程式的新方式。作為經典C#暢銷書 ,C#高階程式設計(第10版)涵蓋了充分利用升級功能,積極簡

C primier plus 十三 13.2標準I/O

首先,關於main(int argc,char *argv[ ])。參考百度百科中的解釋。 https://baike.baidu.com/item/argc%20argv/10826112?fr=aladdin 1. argc的值是命令列引數的個數 什麼是命令列引數? 在命令列下呼

C#圖解教程 十三 委託

委託 什麼是委託 可以認為委託是持有一個或多個方法的物件。當然,正常情況下你不想“執行”一個物件,但委託與典型物件不同。可以執行委託,這時委託會執行它所“持有”的方法。 我們從下面的示例程式碼開始。具體細節將在本章剩餘內容介紹。 程式碼開始部分聲明瞭一個委託型別MyDel(沒錯,是委

C語言程式設計8.1(3)

** 利用矩陣相乘公式程式設計計算mn階矩陣A和nm階矩陣B之積 ** #include<stdio.h> #define ROW 2 #define COL 3 /*函式功能:計算矩陣相乘之積,結果存於二維陣列c中*/ void MultiplyM

C語言程式設計知識

第六章的內容主要是迴圈結構,在實際應用中有非常大的作用。 迴圈:如果迴圈次數是已知的,那麼就用到計數控制的迴圈,比如for;如果迴圈次數未知,需要條件控制,那麼就用到條件控制的迴圈,比如while和do-while,當然,while和do-while通過條件也可計數,未知的至少要執行一次。通

C#高階程式設計(7版)pdf

下載地址:網盤下載 內容簡介 編輯 本書是Wrox暢銷書,C#經典名著!2009年度全行業優秀暢銷書。自第一版出版以來,都是國內讀者的普遍好評,累計銷量近十萬冊。 《C#高階程式設計(第7版)》的頂級專家作者團隊首先複習了C#的基礎知識,之後詳細講解了該語言

c++語言程式設計例題

例4-1 #include<iostream> using namespace std; class Clock { public: void setTime(int newH=0,int newM=0,int newS=0); void showTime(); pr

UNIX環境高階程式設計——-檔案和目錄

4.2 函式stat、fstat、lstat 1、函式原型: #include <sys/stat.h> int stat(const char *restrict pathname, struct stat *restrict buf);

UNIX環境高階程式設計———程序控制

8.2 程序標識 1、每個程序都有一個非負整型表示唯一程序ID。 2、程序ID是可複用的。當一個程序終止後,其程序ID就複用的候選者。 3、程序ID為0的程序通常是排程程序,常常被稱為交換程序(swapper)。該程序是核心的一部分,它並執行任何磁碟

Python核心程式設計(十三)--面向物件程式設計

面向物件程式設計主要是類和類的例項 建立類: class MyNewObjectType(bases): 'define MyNewObjectType class' class_suite 關鍵詞是class,緊接著是一個類名,隨後是定義類的類體程式碼 o

C#高階程式設計六天----列舉

列舉 定義列舉用到的關鍵字:enum  public enum TimeOfDay         {             Monring = 0,             Afternoon = 1,             Evening = 2         }

重新學習《C++Primer5》12-動態記憶體

12.1動態記憶體與智慧指標 12.1.1 shared_ptr類 1.智慧指標也是模板,定義方式一樣 2.make_shared<>最安全的分配和呼叫方法 auto p=make_shared<vector<string

C語言程式設計習題三

3.1 (1)(float)(a*b)/2)=18.000000   (int)%(int)y=2 (2)P=32 q=80 x=33 y=80 3.2 1#include<stdio.h> 2main() 3{ 4      intx=123,a,b,c,su