大神洗禮第三講 接上一講

2022-02-04 02:37:50 字數 2029 閱讀 1995

author:bakari                 date:2012.10.26

這一講的主要內容和上一講相同,是上一講的深入分析。記憶體對齊涉及記憶體實現的細節,複雜宣告是對指標的深入理解,這些內容平時用到很少,學習之益於開拓思維,達到巨集觀調控自己的知識結構。

< 1 >、編譯器預設對齊的位元組:8位元組,對齊位元組數只能選2^n(一般不超過16位元組)

在程式中用#pragma back( x ) ……. #pragma pop()來轉換。

< 2 >、單個成員變數的自身對齊位:min(預設對齊位,本身所佔位元組數)

< 3 >、結構體的有效對齊位:該結構體(或union或class)的成員變數中,

min(最大所佔位數,預設對齊位)

其中< 2 >可以不考慮,< 3 >是考慮的關鍵

< 4 >、除以上3點外,還要考慮乙個關鍵特性:圓整。          

何為圓整?每個變數所佔位元組數之和與 < 3 >中的有效對齊位求模,如若為0,則不作改變,否則,系統自動以 cc 作為填充,以保證對齊。

e.g:具體看下面的幾個例子:

1

struct

test ;

編譯器的預設對齊位是:8 即#pragma back (8),結構體最大的成員變數是db,佔8個位元組,所以結構體的有效對齊位是 8.

通過上面三條規則,可以得出:sizeof(test)= 5 + 3cc + 8 + 4 + 1 + 3cc = 24;

記憶體布局:

< 2 >、將double db 改為int ib;

1

struct

test ;

同理,sizeof(test) = 5 + 3cc + 4 + 4 + 1 + 3 cc = 20;

記憶體布局:

< 3 >較為複雜,道理一樣,分開看

1

struct

ax ;89

union bx ;

1314

struct

xtest ;

直接看記憶體布局:(sizeof(xtest) = 64)

這裡我們來點刺激的,將複雜宣告的語句用機器列印出來,換句話說不是你來說,而是交給機器來顯示:(關於這一點the c programming language一書有講)

我們直接看**:(只顯示三個主要的函式)

機器學習十講第三講

本講開始講了梯度下降演算法和最大似然估計演算法。樣本數量 n classes 2,類別數量 n features 2,特徵數量 n informative 2,有資訊特徵數量 n redundant 0,冗餘特徵數量 n repeated 0,重複特徵數量 n clusters per class ...

第三講 前置知識

啥是前置的知識?應該是一種粗略的大概的,對其進行解。就像平時玩戲,要知道這個遊戲有啥子背景,講的是啥事兒,如何去玩它。包括遊戲中各類的圖示代表什麼個意思,初期對其進行初步的了解。說的好像你很屌的樣子,再屌又咋滴,還不是屌絲乙個,光棍一條,哈哈!你說我,老大咱都要各自照照鏡先吧。我已經夠青出於蘭了,你...

Java基礎第三講

一.運算子 1.邏輯運算子 一般用於連線boolean型別的表示式或值 並且 有false則false 或者 有true則true 非 非false則true,非true則false 偶數個不會改變本身 異或 結果相同為false,結果不同則為true 短路與 與 的區別 結果一樣,具有短路效果,如...