開發計錄

作業要求

  • Question #2, #3, #4, #5, #6, #27
  • 在 GitHub 上 fork quiz,然後逐一修改每個目錄裡面的檔案
  • 對於 Question #2, #3, … #6 都需要實做遞迴和非遞迴的版本
  • 要一併準備測試資料
  • 試各項邊界狀況
  • 執行時間分析
  • 記憶體需求分析
  • cache miss 分析
  • 時間複雜度分析

Q2

非遞迴版本
程式本身不難,但在開發過程中發現一個奇怪的問題,
char a[5] = {'c','f','j','p','v'};
char b[3] = {'c','c','k'};
printf("strlen(a)=%u\n", (unsigned)strlen(a));
printf("strlen(a)=%u\n", (unsigned)strlen(b));
以作業二中用到的函式strlen()會得到下列結果
strlen(a)=6
strlen(b)=3
但若改成
#define size 20
char a[size] = {'c','f','j','p','v'};
char b[size] = {'c','c','k'};
printf("strlen(a)=%u\n", (unsigned)strlen(a));
printf("strlen(a)=%u\n", (unsigned)strlen(b));
則會得到:
strlen(a)=5
strlen(b)=3
why?
 
遞迴版本
這個用遞迴寫好像有點癟足,我是利用global variable紀錄進入遞幾層遞迴
 
分析
Iterasive:
             58,334      cache-misses              #   10.208 % of all cache refs      ( +- 17.84% )
           571,457      cache-references                                                              ( +-  2.83% )
           510,849      L1-dcache-load-misses                                                     ( +-  0.64% )        
           224,282      L1-dcache-store-misses                                                    ( +-  0.24% )
           142,203      L1-dcache-prefetch-misses                                             ( +- 17.34% ) [57.04%]
<not counted>     L1-icache-load-misses    
 
       0.028719336 seconds time elapsed                                                      ( +- 26.24% )
 
Recursive: