標籤(空格分隔):《c++高效程式設計》
本部落格是看《c++高效程式設計》的筆記,還在更新中。。。書張這樣:
第一部分扯蛋,沒怎麼看,直接看第二部分。的確是好書,值得一看。
三條指令教你做人:
gcc -s hello.c
gcc -c hello.c
gcc -e hello.c替換#include標頭檔案gcc -e hello.c >> output.txt 輸出結果放入乙個檔案中【>> 流操作】
替換#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來說,這幾個字段通常都由套接字型別隱式說明,引數被設定為零。在某些情況下,比如對原始套接字來說,有幾種可能的協議,就要指定希望使用的協...