Time of Update: 2018-12-04
make一個超大項目的時候,你有沒有過痛不欲生的感覺,make有時候可以長達半個小時。現在是多核的世界,你可以試試make -j 10,有時候可以把編譯速度提高五倍。也就是說原本要半個小時的編譯,也許五六分鐘就編譯好了。注意:用make -j 10可能會遇到少數項目出問題。比如在編譯openssl的時候,make -j 10就會編譯出問題。不過大多數時候這個參數還是很有用的。請仔細測試。測試ok的話就試試吧!
Time of Update: 2018-12-04
C++有記憶體保護嗎,真的有:http://en.wikipedia.org/wiki/Buffer_overflow_protection這個只能保護stack上的buffer,不過已經很有作用了。寫越界寫壞callstack的機率低了很多。提醒:如果callstack沒有效資訊,更有可能是環境版本不匹配。真正寫壞callstack這種事情很罕見的。另外,用ldd命令可以看兩台機器的環境是否一致,注意shared library的地址:ldd httpd libz.so.1 =
Time of Update: 2018-12-04
image.font(font);image.fontPointsize(fontSize);TypeMetric metric;image.fontTypeMetrics(txt,
Time of Update: 2018-12-04
#ifndef EASYRANDOM_INCLUDED#define EASYRANDOM_INCLUDEDstatic const int A = 48271;static const int M = 2147483647;static const int Q = M/A ;static const int R = M%A ;class Random...{public : explicit Random(int initialVal=1); int RandomInt();
Time of Update: 2018-12-04
以前也沒多注意C和C++有什麼差別,感覺C++沒有類,模板和引用,那麼C++就是C近幾天特別注意了這方面的問題,發現以前想的還是有問題的。去掉了類,模板和引用的C++和C還是有一定的差別的。下面列了幾點還多多指教函數原型在C++中函數原型是必須的,而C中是可選的在C中圓括弧意味著前向原型聲明,但在C++中就意味著函數沒有原型例如int test();int main(){ int test(4,5);}int test(int a,int
Time of Update: 2018-12-04
專用的‘對象池’可以比通用的‘記憶體池’效能高兩個數量級。通過宏定義(DECL_MEM_POOL,
Time of Update: 2018-12-04
程式裡面getaddrinfo()有可能會持續的返回 "Temporary failure in name
Time of Update: 2018-12-04
namespace中文意思是命名空間或者叫名字空間,傳統的C++只有一個全域的namespace,但是由於現在的程式的規模越來越大,程式的分工越來越細,全域範圍變得越來越擁擠,每個人都可能使用相同的名字來實現不同的庫,於是程式員在合并程式的時候就會可能出現名字的衝突。namespace引入了複雜性,解決了這個問題。namespace允許像類,對象,函數聚集在一個名字下。本質上講namespace是對全域範圍的細分。我想大家都見過這樣的程式吧:hello_world.c#include
Time of Update: 2018-12-04
1,啟動gdb的時候自動執行指令碼gdb -x your_script注意:your_script裡面只能有gdb命令。不過我們都知道gdb命令裡面有個shell指令,所以實際上這裡可以做任何事。2,調試運行中的進程在gdb裡面有個attach指令,可以調試運行中的進程。結合上面的-x參數,實際上我們可以寫一個指令碼,自動的attach到我們關心的進程上面,然後自動的做很多事情:比如設定trace命令並且continue。3,設定條件斷點break test_func() if x ==
Time of Update: 2018-12-04
首先,使用最新版的imagemagick,因為較早的版本不能很好的支援static編譯方式(據說小於6.5的都可能有問題)。第二,到imagemagick-src目錄,執行命令 ./configure --disable-shared --prefix=$(YOUR_IM_PATH)第三,如果你有動態庫需要使用這個靜態編譯的imagemagick,那麼還要export CFLAGS="-O3 -Wall -fPIC"第四,執行make命令,執行make
Time of Update: 2018-12-04
gdb的斷點是基於訊號(signal)實現的在某個地址增加一個斷點,實際上就是修改那個地址的代碼,把原來的代碼替換成INT
Time of Update: 2018-12-04
只要#include <Magick++.h>就可以使用所有功能了。但是你可能會遇到./my_magick.cpp:10: error: 'ThreadResource' was not declared in this scope./my_magick.cpp:10: error: 'SetMagickResourceLimit' was not declared in this scope這是由於Magic++把所有的C風格API都包含到namespace
Time of Update: 2018-12-04
#include "stdafx.h"typedef void (*fVoid)();class A{public: static void test() { printf("hello A\n"); } fVoid print; A() { print = A::test; }};class B : public A{public:
Time of Update: 2018-12-04
‘真正的’函數只有一種,對應成彙編裡面的jmp,也就是跳轉到某個地址去執行。所謂全域函數、局部函數、成員函數、靜態成員函數、虛函數,都是各種美味的文法糖。全域函數基本上是原始意義上的函數。局部函數(static的全域函數)只是在gcc限制了只允許本cpp的代碼jmp過去。實際上在彙編或者二進位層級是沒這種概念的。純正文法糖。成員函數,只是gcc給函數加上了以class為依據的首碼,然後加上了this指標的參數,實際上gcc編譯之後,還是變成了一個全域函數,只是函數的名字比較特別而已。純正文法糖。
Time of Update: 2018-12-04
作為一個C/C++程式員,應該怎麼應對OOM,尤其是作為一個linux
Time of Update: 2018-12-04
上代碼,碼農都喜歡上代碼:下面是main.c:#include <stdlib.h>#include <stdio.h>#include <string.h>#include "lua.h"#include "lualib.h"#include "lauxlib.h"void init_lua(lua_State*
Time of Update: 2018-12-04
最近和人討論了一些編程中的方法,越發覺得學文法應該不求甚解。文法掌握的越精深,就越有能力閱讀和寫出晦澀的代碼。但是有能力寫出晦澀代碼,其實是一種缺陷。因為這會無形之中讓你不小心寫出晦澀的代碼,因為你瞭解那種晦澀的寫法,所以你認為寫出來也無所謂。但晦澀代碼其實是劣質的代碼。一種典型的壞代碼是:if (a && b && func_do_something());上面的代碼看起來簡潔而正確,實際上更好的代碼卻是下面這種繁瑣的寫法:if (a && b)
Time of Update: 2018-12-04
轉載自:http://blog.csdn.net/bailu66/article/details/7493859簡單點就是:對於指標,深copy時候,相同資料指標指向不同的記憶體位址深度拷貝是什嗎? 其實就是針對指標或引用的特殊處理而已。任何物件導向的程式都要解決的問題。 一個對象A裡面有一個指標指向一堆資料,你現在想把這個對象拷貝一份B,那麼這個指標怎麼辦?如果預設的話,指標的內容被拷貝,那麼拷貝後的對象B和之前的對象A中的指標指向的是同一個資料。這樣就是“淺拷貝”。如果B中修改了這些資料,A
Time of Update: 2018-12-04
c 結構體的嵌套引用解讀背景:在Linux核心系統中經常能看到如下例1形式的結構體嵌套引用,在代碼追蹤、走讀的時候令人費解。所以在弄清楚結構體的嵌套調用就很有用處了。概念: 1、結構的自引用 在一個結構內部包含一個類型為該結構體自身的成員是不合法的。如下: struct SELF_REF1 {int a;struct SELF_REF1 b;int
Time of Update: 2018-12-04
// cpp.h#ifndef __cpp_h__#define __cpp_h__class class1 { class1(); ~class1();public: int I; int J; int getI(void);};#endif// end file// cpp.cpp#i nclude "stdafx.h"#i nclude <iostream>#i nclude "cpp.h"#i nclude