原创 text data bss heap stack

1.text:已編譯程序的機器代碼。 2.data:已初始化的全局變量。 3.bss:未初始化的全局變量。在目標文件中這個節不佔據實際的空間,它僅僅是一個佔位符。目標文件格式區分初始化和未初始化變量是爲了空間效率:在目標文件中,未初始化變

原创 C/C++知識點彙總

1. C++中類對象的內存佈局和佔用空間: a.非靜態成員變量總合。 b.編譯器爲了CPU計算,作出的數據對齊處理(可用#pragma pack(n)來設定變量的對齊方式)。 c.爲了支持虛函數,產生的額外負擔。 //例子: #prag

原创 缺省參數值是靜態綁定的

class A { public: virtual void func(int val=1) { std::cout<<"A->"<<val<<std:endl; } virtual void test() { func

原创 運行時類型識別(RTTI)

實現RTTI的兩個重要運算符: typeid:返回表達式的類型。 dynamic_cast:用於將基類的指針或引用安全地轉換成派生類的指針或引用。 當我們將這兩個運算符用於某種類型的指針或引用,並且該類型含有虛函數時,運算符將使用指針或者

原创 純虛函數可以有函數體

出處:《C++Primer》中文版第五版541頁第22行。 我們可以爲純虛函數提供定義,不過函數體必須定義在類的外部。若定義在類的內部,會出現錯誤:pure-specifier on function-definition。 class

原创 構造函數的執行順序

先執行基類的(如果基類當中有虛基類,要先執行虛基類的,都是按照繼承時的順序依次執行),再執行成員對象的(聲明的順序),最後執行自己的。(切記都不是初

原创 淺拷貝與深拷貝 拷貝控制總結

class A { int i; }; class B { A *p; public: B(){p=new A;} ~B(){delete p;} /* B(const B &temp) { p=temp.p; }

原创 快速冪

int power(int b,int e) { if(e==0) return 1; if(e%2==0) return power(b*b,e/2); return b*power(b*b,e/2); }

原创 調用函數時棧的活動情況

//假設在一個32位little endian的機器上運行下面的程序,結果是多少? #include <stdio.h> int main() { long long a=1,b=2,c=3; printf("%d %d %d\n",

原创 巧妙計算一個數二進制表示法中1的位數

//巧妙計算一個數二進制表示法中1的位數。 int fun(unsigned int n) { n=(n&0x55555555)+((n>>1)&0x55555555); n=(n&0x33333333)+((n>>2)&0x3333

原创 volatile

volatile:易變的,不穩定的。volatile用來聲明那些可能在你的程序本身不知道的情況下會發生改變的變量。 一個定義爲volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是

原创 《計算機組成與設計(硬件/軟件接口)》讀書筆記

第一章 1. 組成計算機的五個典型部件是輸入、輸出、存儲器、運算器和控制器。 2. CPI表示執行每條指令所需的時鐘週期數的平均值。 任何一個獨立的因子都不能確定性能,只有三個因子的乘積(即執行時間)纔是可靠的性能度量標準。 CPU時

原创 《UNIX環境高級編程》(第三版第一章)

1. /etc/passwd /etc/shadow /etc/group /etc/gshadow 2. //當文件是一個符號鏈接時,stat返回的是該符號鏈接引用的文件的信息,而lstat返回的是該符號鏈接的有關信息。 int st

原创 關於fork函數

//請問下面的程序一共輸出多少個“-”?8個。 int main() { int i; for(i = 0;i<2;i++) { fork(); printf("-"); } return 0; } //一共調用了6次p

原创 C++命名的強制類型轉換(static_cast dynamic_cast const_cast reinterpret_cast)

cast_name<type>(expression) 1. static_cast:任何具有明確定義的類型轉換,只要不包含底層const(比如常量指針,而不是指針常量),都可以使用。常用於窄化轉換(告訴程序的讀者和編譯器:我們知道並且