準備看的書

cryptto 加解密的,太專業

json  json解析的

 

atexit.cc,順便可以看一下crt0.c瞭解下程序的啓動和關閉過程

程序退出前做動作的,通過超出變量範圍時調用析構,執行事先註冊在一個棧變量的函數,具體是執行的啥沒看過

首先其他函數調用RegisterCallback

然後退出前具體執行 ProcessCallbacksNow();

 

base_switches.cc一些設置選項怎麼用還待查

 

 

 

 

 

basictypes.h

 

template <typename T, size_t N>

char (&ArraySizeHelper(T (&array)[N]))[N];

#define arraysize(array) (sizeof(ArraySizeHelper(array)))

這個用法很是奇怪,google了下,發現跟stdlib的_countof是一樣的

atlapp.h中的,符合一般的習慣用法

  #define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))

 

 

stdlib.h中的,跟google這個一個原理

template <typename _CountofType, size_t _SizeOfArray>

char (*__countof_helper(UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];

#define _countof(_Array) sizeof(*__countof_helper(_Array))

具體解釋參見http://blog.sina.com.cn/s/blog_494684f00100ihkd.html

爲啥簡單問題複雜化,難道atlapp中的不好麼?繼續看下去就知道答案了,

#define ARRAYSIZE_UNSAFE(a) ((sizeof(a) / sizeof(*(a))) / static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))

如果被傳入的參數是個指針?safe就會報個編譯錯誤,unsafe會返回一個你不想要的值,看google的代碼就像看書,註釋很詳細

在vc下,sizeof不會返回0,但是gcc會

!(sizeof(a) % sizeof(*(a)))這個不知道什麼意思,它裏面說是bool跟具體實現相關,可能某些bool只佔一個位?

// Since the size of bool is implementation-defined, we need to cast

 

// !(sizeof(a) & sizeof(*(a))) to size_t in order to ensure the final

// result has type size_t.

A bit field is an std::vector<bool>. It is a specialization of vector designed to optimize memory utilization. Every element in a bit field uses exactly 1 bit. The capacity of a bit field can only grow in multiples of 8, though.

 

lazy_instance.cc

使用位置new操作符 return new (instance) Type();

  int8 buf_[sizeof(Type)];  // Preallocate the space for the Type instance.

單例模式相對於全局靜態變量,最大的問題就是多線程竟態下的不可預知性

google怎麼做的呢?他通過原子操作InterlockedCompareExchange來比較是否爲0

是的話,創建完成之後設爲end,然後其他線程循環判斷並sleep(0)等待創建完成,但是這個state_變量啥時候變成0的呢

難道這個類在外面也始終作爲全局變量來用?是做爲全局變量的

這個問題其實很難碰到,

寫寫應用,估計是從來不需要考慮這種問題

 

pickle.cc 處理其他格式合併到內存的一個類,以前都是使用結構,他這個不需要預定義結構了,只要打包進去就行了,再按順序解包就行了

 

tuple 強大的元組出現了,以前要做這事,就得定義一大堆的struct,模板的使用很強大

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章