2018年11月1日 星期四

[C] VLA

VLA (Variable-Length Array) 起自 C99,讓陣列大小可以在執行時才決定,雖然有方便性,但有缺點:
  • 執行時需要決定陣列大小,會慢一點,程式也會大一點。(或許最終使用的記憶體較少)
  • LLVM Clang 不支援在 struct 裡放 VLA (GCC 支援),只支援 C99 形式的 VLA。
  • 最重要的是 VLA 的使用在 kernel 堆疊有安全疑慮 (security implication)。 
Linux v4.20 移除了 VLA,並加了「-Wvla」來發出編譯告警,避免不經意再加入 VLA 的程式碼。

參考:
  1. The Linux Kernel Is Now VLA-Free: A Win For Security, Less Overhead & Better For Clang
延伸閱讀:
  • 大小 0 的陣列

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...