最近的工作剛好是記憶體減肥,
有許多工程師因為貪便宜容易犯的錯誤...
1.
用 calloc 之類的東西來要單一個linklist item的記憶體,
結果calloc了比實際使用記憶體還多兩倍左右的記憶體,
如果知道這個list很長的話,應該用mem page去排。
用calloc的話會浪費header和padding的空間
2.
可以用int index卻用了pointer,
int 可以指到4G,當今應該還沒有design
多到超過4G的instance or rectangle,
int 跟 pointer 差兩倍,一個linklist item
大小會差兩倍。
3.
喜歡用四個方向的data structure 來表示空間
例如
struct CELL{
CELL up;
CELL down;
CELL left;
CELL right;
};
4個pointer 就吃掉四倍了...
這種東西sort完用index array來排就好了
排x 和y 方向的index array,不要用pointer
至少省一半以上
(INDEX ARRAY 請參考CSC (Compressed sparse column)和CSR matrix )
這都是10多年經驗的工程師會幹的事,
大概因為在趕工都隨便寫。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.115.7.210