2015年2月24日

[C++] 強制 STL container 釋放資源

一般來說 STL 的 container 都會提供一個 member function clear() 清除 container 內部的資料,不過我想大家也很常遇到一種情形是這樣的:

1. 先配制足夠的空間給 container
2. 開始存取運用 container 內的資料
3. 呼叫 clear 清空 container 的資料以便下次再度利用這個 container

一般我們可能會假設一呼叫 clear() 後 container 就會釋放所配置的資源,但在這種情境下就很容易出現頻繁記憶體配置與釋放。但這實際上是可以避免得,我們其實只要把儲存在 container 中的資料解構使其所利用的資源變成 raw memory,下次要再度使用時只要重新建構即可,如此一來我們即可省去記憶體是放與配置的冗長時間。基於這個理由,呼叫 STL container 的 clear() 其實不一定會釋放所持有的資源,可能僅僅將所儲存的資料解構而已,因此如果今天想要確保 container 必定會釋放所持有的資源的話可以這樣做 (以下用 vector 做範例說明):

std::vector<int> vec;
// some operations
vec.swap(std::vector<int>());

當然更好的做法就是讓變數的 scope & 生命週期盡可能的小使其直接呼叫 destructor 來釋放資源囉。

[C++] The Use of priority_queue And decltype

在 C++ 中要使用 heap structure,最直覺的方法就是使用 STL 的 priority_queue。priority_queue 預設會假定你在 template parameter 所指定的 data type 會支援 operator<,並且利用 operator< 去對資料做排序。其預設的排序行為會行程 max heap,若需要使用的是 min heap,則必須在 template parameter 指定 compare function 或 compare object 的 type,並在 constructor 指定 compare functor 的行為。

在 C++11 推出前,為了提供自定義行為的 functor,會讓 code 變得稍稍難看了點 (請參閱 cplusplus 上的範例),然而,運用 C++11 的 lambda expression 或是 decltype 即可讓程式碼變得更為簡潔易懂。

2015年2月14日

[遊記] 情人節來走情人谷步道 (南坪古道)

其實原本是看到健行筆記的這篇文章要去走南坪古道,後來對照地圖後發現網路上看到的資料其實是叫做 "情人谷步道",或許以前是叫南坪古道,但現在的南坪古道不是指那條步道了 (google map 上有標示南坪古道,但沒有情人谷步道的地圖,要地圖的話請參考這份地圖,上面虛線部分就是情人谷步道,也就是健行筆記所講的南坪古道)

由於 google map 上標記的那條南坪古道不知道有啥東西,所以我們後來還是去走健行筆記上講的南坪古道,接下來的南坪古道也都是指我們實際走的路線。

2015年2月4日

[EDA] Mordern IC Design in Advanced Technology Nodes

我猜可能標題不用看完,跟 IC design 無關的人就直接關掉了 XD
雖然等等要講的東西沒有很深入,但確實也不是對這領域沒興趣的人會想知道的東西就是了~

這篇其實只是簡單整理一下從碩班做到現在,做過的東西 & 看過的論文的一些整理與心得,不過因為我很懶,所以不用期待會看到完整詳實的數據或圖表 XD

2015年1月31日

[隨筆] 程式碼的可讀性與時間的關係

其實這篇只是想要講一下最近 coding 時發現的自己的一些習慣 XD
想講的話自己的程式碼的可讀性隨著時間的過去會呈現什麼樣的關係

2015年1月21日

[C++] static const Member in a struct/class

C/C++ 的 struct/class (為方便解說,接下來統一用 struct ) 可以將其成員變數的型態附加上 static const 修飾詞,如此一來該成員變數即為所有該 structure 產生出來的 object 共享的成員變數,並且也無須透過特定的 object 來存取,可以直接用 structure name 去存取該成員變數,例如:

struct A
{
    static const int val = 1;
};
int x = A::val + 1; // direct access

一般來說雖然不允許 structure 的成員變數直接在宣告時給予初始化,但是有 static const 修飾的成員變數是唯一的例外,允許直接在宣告時就給予初始值。不過這次這種使用方法卻讓我遇上不明究理的 link error,簡述如下:

2015年1月3日

[閒聊] 煮奶茶

之前有次跟茶友泡茶聊天時,聊到了煮奶茶這回事。煮奶茶之所以特別,在於它是純粹只用奶去煮茶葉,過程中沒有任何一滴水,所以跟一般奶茶的滋味也特別不同。

2014年11月26日

[EDA] A Novel Fast Layout Encoding Method for Exact Multi-Layer Pattern Matching with Prufer-Encoding

其實這是一篇充滿心酸血淚史的 paper,從碩一開始做的計畫,碩二開始寫成論文投稿,歷經 3 ~ 4 次的投稿被拒,途中多次的修改與延伸才終於完成。期間其實也有把部分成果投到 workshop 去,不但被接受,還被選為 best paper,但投到國際期刊還是被 reject,各種傷心淚水流滿地...不過最後終於是投上 EDA 的 top journal 了。

這篇論文刊登在 2014 的 Transactions on Computer-Aided Design of Integrated Circuits and Systems (TCAD),主題是探討在先進製程上很被看重的 DFM (Design for Manufacturing) - 可製造性設計的其中一個細項 - hotspot detection (或者是 pattern recognition)

2014年11月15日

[EDA] Multiple Patterning Lithography (MPL)

IC 界很常聽到、paper 上也很常當作引言的摩爾定律告訴我們:IC 上的電晶體數目每 18 個月就增加一倍 ( 可以參考我之前寫的這篇文章 )。而這幾年的做法就是一直把電晶體的大小縮小,但是現在已經縮到 16nm 的等級了,預計再過個 1 ~ 2 年就會到 10nm,1 個原子大小也才 0.1 nm,在這種情況下,製造 IC 的難度跟以往是無法比較的,以現在製造上最常被拿出來討論的問題就是無法精細的做出設計者預期中的形狀導致的良率問題。MPL 則是現在常被拿出來討論的解決方法之一。

2014年11月10日

[C++] Tips of Calculating Floor and Ceiling on Integer Types

C/C++ 寫了一段時間的人,應該或多或少會遇到一些簡便的偷懶寫法,例如不用暫存變數就交換兩個變數的值之類的,這類技巧雖然多半有著先天的限制條件,但是適用場合因為相當的廣泛,所以用的人其實不少。

這次要介紹的小技巧是在給定兩個型態是整數型態的變數 a & b,計算 $\left\lfloor\frac{a}{b}\right\rfloor$ 跟 $\left\lceil\frac{a}{b}\right\rceil$ 。