Time of Update: 2018-12-04
前些天有個朋友問我,要不要去讀讀《Effective C++》,我忽然給出一個建議:不要讀,最多看一下目錄就好了。作為一本非常受歡迎的C++教材,我為什麼要建議朋友不要讀呢?事後我反思了一下我的想法:《Effective
Time of Update: 2018-12-04
看到一篇讓我不爽的文章:http://www-128.ibm.com/developerworks/cn/java/j-jtp09275.html Java的new應該和C++的object pool或者memory pool去比效能,而不是和malloc比效能。malloc更多的是一個作業系統API。 實際上我覺得自己很雞婆。Java比C++快這種論點,實在是只有傻瓜才會相信。但是現實是真的很多人相信這一點,而且我居然還跳出來解釋。
Time of Update: 2018-12-04
情境是這樣的,有個邏輯對象的結構如下: struct Msg { int type; char name[12]; float height; float width; int count; int flag;} C++和C#分別來做這個對象的傳輸。 傳輸方面沒什麼好說的,是作業系統IO的事情,和語言無關。 下面是收到資料之後進行parse,為了對比,我們把資料parse一百萬次。 C++從socket收到char*
Time of Update: 2018-12-04
C 類型限定符const 和volatile1、const通常在聲明中,const出現在儲存類型之後,資料類型之前。如:static const int a=3;//a 是一個靜態儲存類型的整形常量由於已經用const限定了a的類型,我們可以對a進行初始化,但以後不能再對a賦值,增量和減量操作。雖然對使用const對變數作了限制,也不能在另一個聲明中用變數描述數組的大小。錯誤使用例1:const int k=3;int array[k];//錯誤因此,由const限定的變數與符號常量是不等價的。
Time of Update: 2018-12-04
沒有什麼比signed和unsigned的區別更無味了。unsinged資料類型似乎沒有存在的必要。一、unsigned可以提供更大的正數範圍 反對:對於小資料來說,signed的範圍就足夠了;對於大資料來說,signed和unsigned所提供的範圍其實幾乎沒什麼區別。Int8,Int16, Int32,
Time of Update: 2018-12-04
上篇文章說到linux需要itoa函數,下面我就提供一份跨平台的itoa函數。 //return the length of result string. support only 10 radix for easy use and better performanceint my_itoa(int val, char* buf){ const int radix = 10; char* p; int a; //every digit int len;
Time of Update: 2018-12-04
最新訊息說ISO C++委員會批准了C++0x最終草案。最新的C++標準將在夏天發布,先前被臨時命名為C++0x的新標準將被稱為C++ 2011。 缺憾:Concepts不能出台錯過了一次給template升級的難得機會;typeof未能實現只拿出了一個decltype的廉價替代品;記憶體處理方面沒有解決根本問題(越界);異常處理方面幾乎沒改進。 亮點:auto關鍵字簡化了template編程;有了標準的線程和鎖;強型別的枚舉;從其他語言借鑒的一些文法糖;把一些早已是事實標準的東西放入了標準。
Time of Update: 2018-12-04
/************************************************ NAME : MMU.CDESC :Revision : 1.0************************************************/#include "def.h"#include "option.h"#include "2440addr.h"#include "2440lib.h"#include "2440slib.h"#include
Time of Update: 2018-12-04
C可變參數個數C語言中有一種長度不確定的參數,形如:"…",它主要用在參數個數不確定的函數中,我們最容易想到的例子是printf函數。 原型: int printf( const char *format [, argument]… ); 使用例: printf("Enjoy yourself everyday!/n"); printf("The value is %d!/n", value);
Time of Update: 2018-12-04
在內嵌彙編中,可以將C語言運算式指定為彙編指令的運算元,而且不用去管如何將C語言運算式的值讀入哪個寄存器,以及如何將計算結果寫回C 變數,你只要告訴程式中C語言運算式與彙編指令運算元之間的對應關係即可, GCC會自動插入程式碼完成必要的操作。 1、簡單的內嵌彙編 例: __asm__
Time of Update: 2018-12-04
"if (p == NULL)"和“if (NULL == p)”,哪種寫法是更好的代碼風格?有人認為“if (NULL == p)”可以避免==被寫成=,從而減少bug。但是我對一些優秀項目的代碼做了一下統計,發現:Linux kernel 12436 318glibc 3715 0在linux kernel裡面,"NULL =="只出現了318次,而glibc裡面"NULL =="根本就一次都沒有出現過。 因此我認為,基於代碼的可讀性的原因,“if (p ==
Time of Update: 2018-12-04
在使用C++編程的過程當中,常常需要對類成員進行初始化,通常的方法有兩種: 第一種方法: CMYClass::CSomeClass() { x=0; y=1; } 第二種方法: CSomeClass::CSomeClass() : x(0),
Time of Update: 2018-12-04
BSS段:BSS段(bss segment)通常是指用來存放程式中未初始化的全域變數的一塊記憶體地區。BSS是英文Block Started by Symbol的簡稱。BSS段屬於靜態記憶體配置。資料區段:資料區段(data segment)通常是指用來存放程式中已初始化的全域變數的一塊記憶體地區。資料區段屬於靜態記憶體配置。程式碼片段:程式碼片段(code segment/text
Time of Update: 2018-12-04
C語言中結構體對齊問題 收藏 關於C語言中的結構體對齊問題1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B;sizeof( A)=6, sizeof(
Time of Update: 2018-12-04
c語言面試題-----指標篇 收藏 1. char * const p; char const * p const char *p 上述三個有什麼區別? char * const p; //常量指標,p的值不可以修改 char const * p;//指向常量的指標,指向的常量值不可以改 const char *p; //和char const *p------------------------------------------------------2. char
Time of Update: 2018-12-04
針數組和數組指標(C) 收藏 //注意指標數組和數組指標分別是如何指向二維數組的#include <stdio.h>main(){ static int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};/* 定義二維數組m並初始化*/ int (*p)[4];//數組指標 p是指標,指向一維數組,每個一維數組有4個int元素 int i,j; int *q[3];//指標數組 q是數組,數組元素是指標,3個int指標 p=m;
Time of Update: 2018-12-04
多級反饋隊列調度演算法:1、設定多個就緒隊列,並給隊列賦予不同的優先順序數,第一個最高,依次遞減。2、賦予各個隊列中進程執行時間片的大小,優先順序越高的隊列,時間片越小。3、當一個新進程進入記憶體後,首先將其放入一個對列末尾,如果在一個時間片結束時尚未完成,將其轉入第二隊列末尾。4、當一個進程從一個對列移至第n個隊列後,便在第n個隊列中採用時間片輪轉執行完。5、僅當時間片空閑時,才調度第二個隊列中的進程。(1~i-1)空閑時,才調度i,如果處理機正在第i隊列中運行,又有新進程進入優先權較高隊列,
Time of Update: 2018-12-04
資料結構——棧(C語言實現) 1 /*stack標頭檔*/ 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 typedef struct Node 6 { 7 int data; 8 struct Node* next; 9 }StackNode;10 11 void initStack(StackNode* top)12 { 13 top->next=NULL;14 }15 16
Time of Update: 2018-12-04
1. 定義const對象const 把一個對象轉換成一個常量: const int bufSize = 512;定義bufSize為常量並初始化為512. 因為常量在定義後就不能修改,所以定義時必須初始化。 2 const 引用 const int ival = 1024;const int &refVal = ival;const 引用可以綁定到不同但相關的類型的對象或綁定到右值int i=42; double dval = 3.14;const int &r =
Time of Update: 2018-12-04
PrecedenceOperatorDescriptionExampleAssociativity1()[]->.::++--Grouping operatorArray accessMember access from a pointerMember access from an objectScoping operatorPost-incrementPost-decrement(a + b) / 4;array[4] = 2;ptr->age = 34;obj.age = 34;