contributed by <SarahCheng
>
github:
https://github.com/SarahYuHanCheng/phonebook.git
snoopy831002
>好的,謝謝你!再用hash table試試
不需要在內文標注「日期」,HackMD 會追蹤,應該紀錄「主題導向」的實驗和參考資料 jserv
wifi setting
螢幕畫面截取
linux cmd instruction不熟
problem:
$make 沒有出現"[sudo] password for"
$make plot沒有runtime.png,只有script/runtime.gp
之後有了
$ lscpu | grep cache沒有反應..
$ lscpu
| grep cache即可Tue, Sep 27, 2016 3:37 PM
用astyle沒反應:因為少了空白
astyle --style=kr --indent=spaces=4 --indent-switches --suffix=none
空格*.[ch]
需要解釋「沒反應」為何 jserv
reference:
使用 lscpu
和 sudo lshw
可看到硬體資訊
steps:
1.修改phonebook_opt.h
如下圖
typedef struct __PHONE_BOOK_DETAILS {
char firstName[16];
char email[16];
char phone[10];
char cell[10];
char addr1[16];
char addr2[16];
char city[16];
char state[2];
char zip[5];
} Details;
typedef struct __PHONE_BOOK_ENTRY {
char lastName[MAX_LAST_NAME_SIZE];
struct __PHONE_BOOK_ENTRY *pNext;
Details *details;
} entry;
2.phonebook_opt.c
的append()和findName()複製orig版本
3.記得解開 the comment #define OPT 1
4.清空cache:
$echo 1 | sudo tee /proc/sys/vm/drop_caches
5.make plot 即得下列資訊
size of entry : 128 bytes
execution time of append() : 0.087335 sec
execution time of findName() : 0.005850 sec
Performance counter stats for './phonebook_orig' (100 runs):
1,426,148 cache-misses # 82.108 % of all cache refs ( +- 0.48% ) (74.11%)
1,736,927 cache-references ( +- 0.54% ) (74.39%)
305,721,382 instructions # 1.47 insns per cycle ( +- 0.18% ) (77.20%)
207,828,652 cycles ( +- 0.24% ) (76.70%)
0.068671339 seconds time elapsed ( +- 1.91% )
size of entry : 24 bytes
execution time of append() : 0.036632 sec
execution time of findName() : 0.002973 sec
Performance counter stats for './phonebook_opt' (100 runs):
232,097 cache-misses # 74.079 % of all cache refs ( +- 0.37% ) (74.46%)
313,312 cache-references ( +- 0.51% ) (74.79%)
278,824,752 instructions # 1.75 insns per cycle ( +- 0.28% ) (76.75%)
159,089,222 cycles ( +- 0.28% ) (77.42%)
0.050675378 seconds time elapsed ( +- 1.75% )
Performance counter stats for './phonebook_orig' (100 runs):
1,469,675 cache-misses # 81.589 % of all cache refs ( +- 0.61% )
1,801,320 cache-references ( +- 0.60% )
310,382,365 instructions # 1.45 insns per cycle ( +- 0.01% )
214,099,227 cycles ( +- 0.17% )
0.070388042 seconds time elapsed ( +- 2.18% )
235,670 cache-misses # 79.971 % of all cache refs ( +- 0.22% )
294,695 cache-references ( +- 0.21% )
288,137,012 instructions # 1.78 insns per cycle ( +- 0.00% )
162,238,829 cycles ( +- 0.08% )
利用 fgets的特性,man 完就會發現它會在讀到 newline 或是 EOF停下來並且在他們後面會多種一個 '\0',接著的 code 就是把 newline 變成 '\0',我們延後替換 newline,我操作只比較前面的長度,真的找到了再把 newline 換掉即可。
while (fgets(line, sizeof(line), fp))
e = append(line, e);
/* because the assert test, we can’t modify the strcut*/
if (strncasecmp(lastname, pHead->lastName, len) == 0 &&
(pHead->lastName[len] == ’\n’ ||
pHead->lastName[len] == ’\0’)) {
pHead->lastName[len] = ’\0’;
return pHead;
原本的程式是將字典直接建好,這邊我們先建檢索,等到findName找到時我們再去補上他的資料,這樣也能減少 append()。
Q1:error: stray ‘342’ in program
A:ascii characters missing,程式碼用複製貼上,導致'\n'的引號格式不符
Q2:Assertion failed,還不知道怎解決
size of entry : 24 bytes
phonebook_opt: main.c:89: main: Assertion `0 == strcmp(findName(input, e)->lastName, "zyxel")' failed.
./phonebook_opt: 已經終止
6.用astyle --style=kr --indent=spaces=4 --indent-switches --suffix=none *.[ch]
7.ln -sf ../../scripts/pre-commit.hook .git/hooks/pre-commit
不明原因
error: conflicting types for ‘hashAppend’
int *hashAppend(char *lastName, hashTable *ht)
step:
1.指令參考
2.本機與github同步
貼id_rsa.pub所有內容到github上key的設定
2.若出現fatal: Not a git repository (or any of the parent directories): .git
,因為還沒有.git目錄,要先git init
3.
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream phonebook master
sarah
,phonebook