結構體內存對齊 申請釋放記憶體空間

2021-09-29 13:15:57 字數 3353 閱讀 1019

指標基礎知識 (關於一些不的不知道而且聞所未聞的高中聽都沒聽過的但是讓我支支吾吾的問題)

申請空間+釋放空間

零零碎碎的小知識點

學習是為了改變世界,改變自己,改變人生.

請善用搜尋

不需要了,我會建立目錄了!!!

近期目標:從下標進化到指標

~~ 為了讓自己距離dalao近一點. ~~

指標.

int *pa;

~~ 乙個整型變數指標 ~~

~~*pa目前所代表的意思是指指標指向的變數的記憶體位址中的值.~~

~~pa目前所代表的是指標中存的變數. 應該是吧,貌似沒有指向之前 ~~

上面的內容有些超出我知識水平了,害怕誤人子弟,就先劃去

結構體中的記憶體對齊,是乙個很神奇的的東西.

就是說,你的擺放位置不同,你的結構體的記憶體大小也就不一樣,算起來就要花花心思

就比如:

structnum1;
這個結構體占了多大吶?

4位*3==12b

32位*3==96bit

你可能會問:short不是只佔據2 byte =16 bit嗎? 為什麼是12而不是10吶?

那是因為編譯器會進行邊界對齊

邊界對齊的意思是:將變數大小按照*最大的?*進行對齊

這其中的意思其實是結構體的邊界數必須是結構體中的位最大的整數倍

char

偏移量必須為sizeof(char)即1的倍數

int偏移量必須為sizeof(int)即4的倍數

float

偏移量必須為sizeof(float)即4的倍數

double

偏移量必須為sizeof(double)即8的倍數

short

偏移量必須為sizeof(short)即2的倍數

用途:提高cpu的運算速度

就例如:

structnum1;
這個大小是

8*3==24

64*3==192bit

64bit超過了unsigned int的大小

存疑中.

該回答已被摺疊

1基礎中的基礎

stringchar的異同

先從不同開始吧,畢竟不同之處蠻多的:

1.string末尾通過有著'\0'結束符;char則是單個字元(c/c++語言中的)

2.重點:c++中所新增的:

string 已經是c++中封裝好的類了

#include //呼叫

1.c++atd抽象而來

tips:atd???

和c++的模板有關係,模板可以讓你更關注抽象資料型別的實現而並不用關心這具體是什麼型別。

比如你可以實現乙個鍊錶,而這個鍊錶裡面用來存int還是double你不需要關心。

2.c++中的string是乙個類,字串類.

char*字元指標,使用時需先申請空間,使用完後要記得釋放;

char字元陣列,會自動分配空間,不需手動申請和釋放;

string由c++提供的字串類,封裝了字串操作,比c語言的char*操作起來更安全;

2還沒完

接下來的問題是:

1.申請空間

2.釋放空間

3.如何實現的自動分配

4.字串類操作都有什麼

5.c++常用的庫

6.接著上面問題的庫的操作

7.為什麼c++中的string操作比起char更加的安全

為什麼要申請空間吶?

你的資料結構需要空間去存放,所以在記憶體中申請空間來存放你的資料

這個空間是怎麼申請呢? kk

就比如你乙個變數,想要空間,就給他安排

記憶體分為堆區,棧區,靜態區,**區。

全域性變數和靜態變數存放在靜態區,區域性變數存在在棧區,動態申請的變數(即new,malloc函式申請的變數)存放在堆區

以及什麼樣子的變數都要用指標形式

const int a=100;

#define alength 100

int *pa;

pa=(int*)malloc(alength*sizeof(int))//=整體空間

if(pa==null)return;//判斷是否成功

free(pa);//償還空間釋放記憶體balabalabala....

pa=null;//你再給他空指

//用完就償還,是個好習慣,你做到了嗎?

還有一種操作:

利用new/delete

由於malloc/free 是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠自動地呼叫建構函式和析構函式。即用無法滿足動態物件的要求.

因此 c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以及乙個能完成清理與釋放記憶體工作的運算子delete.

也就是說

new

既能申請類物件空間,也能呼叫建構函式

什麼是建構函式

1u等價於unsigned (1)

通過**按位與 &**和<<**>>**可以完美實現實現十進位製換二進位制

而且不再需要什麼反向輸出什麼的

~~ ps:為什麼我的markdown中的刪除線經常失靈,就比如這個的就不行,上面的就可以 ~~

0x65656565轉換為字元型後,為四個字元 這裡0x指的是以十六進製制儲存

065656565與上同理,不過0代表的是以八進位制儲存

Linux釋放記憶體空間

linux伺服器執行一段時間後,由於其記憶體管理機制,會將暫時不用的記憶體轉為buff cache,這樣在程式使用到這一部分資料時,能夠很快的取出,從而提高系統的執行效率,所以這也正是linux記憶體管理中非常出色的一點,所以乍一看記憶體剩餘的非常少,但是在程式真正需要記憶體空間時,linux會將快...

Linux釋放記憶體空間

linux伺服器執行一段時間後,由於其記憶體管理機制,會將暫時不用的記憶體轉為buff cache,這樣在程式使用到這一部分資料時,能夠很快的取出,從而提高系統的執行效率,所以這也正是linux記憶體管理中非常出色的一點,所以乍一看記憶體剩餘的非常少,但是在程式真正需要記憶體空間時,linux會將快...

Linux釋放記憶體空間

linux伺服器執行一段時間後,由於其記憶體管理機制,會將暫時不用的記憶體轉為buff cache,這樣在程式使用到這一部分資料時,能夠很快的取出,從而提高系統的執行效率,所以這也正是linux記憶體管理中非常出色的一點,所以乍一看記憶體剩餘的非常少,但是在程式真正需要記憶體空間時,linux會將快...