《C 高效程式設計》筆記(壹)

2021-08-18 00:25:22 字數 3553 閱讀 5913

標籤(空格分隔):《c++高效程式設計》

本部落格是看《c++高效程式設計》的筆記,還在更新中。。。

書張這樣:

第一部分扯蛋,沒怎麼看,直接看第二部分。的確是好書,值得一看。

三條指令教你做人:

gcc -s hello.c

gcc -c hello.c

gcc -e hello.c

gcc -e hello.c >> output.txt 輸出結果放入乙個檔案中【>> 流操作】

替換#include標頭檔案

替換#define巨集

c++內嵌彙編例項

#include

#include

using namespace std;

const int mmax = 100;

void change_xyz(int

x, int

y)int main()

生成可執行**

gprof test > test.out

據說能顯示程式執行時間。

gcc -wall hello.c -o hello

簡直就是某些vs使用者的福利呀,clion自帶檢查所以不需要,哈哈

優化1:迴圈要用到某些量放外面

判定素數

int isprime(int n)

return

1;}

換為:

int isprime(int n)

return

1;}

增量法(學圖形學時知道的,隨便舉個例子)

int f1(int a)

void f2(int n)

}

換成:

int f1(int a)

void f2(int n)

}

優化2:少用成員變數和成員函式

void f(int n)

}

改為:

void f(int n)

}

你有沒有想過乙個結構會因為寫法不同而產生不同的大小?

我們看一段簡單的程式:

#include

#include

using

namespace

std;

struct a

;struct b

;#pragma pack(push, 1)

struct c

;#pragma pack(pop)

int main()

結果是32, 24, 18

為什麼呢?

我們看一下儲存結構:(long 型別位元組順序隨系統不同而不同)

a位址內容

00字元a

01未用

02未用

03未用

04long b, byte 0

05long b, byte 1

06long b, byte 2

07long b, byte 3

結構b更為緊湊

a位址內容

00字元a

01字元c

02未用

03未用

04long b, byte 0

05long b, byte 1

06long b, byte 2

07long b, byte 3

a,b的區別告訴我們:原來我們儲存struct時會以最大的資料型別作為基準來放資料。這叫型別對齊

結構c沒有空隙

a位址內容

00字元a

01long b, byte 0

02long b, byte 1

03long b, byte 2

04long b, byte 3

05字元c

06long d, byte 0

07long d, byte 1

編譯指令#pragma pack可以讓編譯器暫時調整對齊

先用push命令把當前的對齊方式放入編譯器棧堆中,最後pop回到初始對齊方式。

1是兩個變數的間距。例:當把char換為short時,我們的命令為:

#pragma pack(push, 2)

struct c

;#pragma pack(pop)

位元域是一種極端的變數對齊方式。它直接指定變數的位元大小。

位元域舉例

#include

#include

using

namespace

std;

struct a

;int main()

編譯器會把整個結構壓縮在兩個long型別中,因此結構體內變數的順序是十分重要的。

錯誤的舉例

#include

#include

using

namespace

std;

struct a

;int main()

位元域節省空間,那它的效率如何呢?書上舉了乙個例子,同乙個程式用struct bitfield;與struct structure;兩種不同的結構,位元域的彙編長度是short的好幾倍(書上例子中是三倍)

另外書上補充說明了位元域的寫法。

錯誤舉例

struct f

可以在乙個結構中包含位元域和基本型別,但不提倡,因為只要結構中出現位元域,所有變數都會以long為基準。

struct c

就像上面這個結構體,a,b存在乙個long中。

最後,位元域無法使用位址,無法對位元域初始化引用。

聯合可以使幾個變數共享一塊儲存空間,聯合的大小就是它所包含的最大元素的大小。

同時聯合的優點也是它的缺點,當我們經常使用聯合中大小較小的變數時,就不考慮使用聯合了。

高效C 程式設計

推薦編寫c 的 風格,看似容易,堅持不易,且寫且珍惜!陳國林 1.版本和版本宣告 版本和版本檔案宣告位於標頭檔案和定義檔案的開頭,主要內容 1 版本資訊 2 檔名稱 識別符號 摘要 3 當前的版本號 作者 修改日期 4 版本歷史資訊 2.程式版式 1 在每個類宣告之後 每個函式定義之後都要加上乙個空...

C 高效程式設計

一 使用readonly而不是const const是編譯時常量,readonly是執行時常量。如果引用了乙個庫中的const常量,則在更新了程式集,但應用程式沒有重新編譯時,執行結果會出錯 如程式集assembly.dll中有如下宣告 1 public static readonly int st...

TCP IP高效程式設計》筆記

1 socket socket int domain,int type,int protocol protocol欄位說明了應該在套接字上使用哪種協議。對tcp ip來說,這幾個字段通常都由套接字型別隱式說明,引數被設定為零。在某些情況下,比如對原始套接字來說,有幾種可能的協議,就要指定希望使用的協...