2019年2月27日

[python] Inheritance & Hack with mock

最近工作的內容因為會用到 python,不過因為 python 實在太過自由了,有些特性對於習慣寫 C++的我來說實在有點不好控制,導致寫好的檢查是有可能被使用者繞過去的,舉例來說,確認使用者是否有 licesce 這件事就極度重要。這邊就筆記一些目前有想到的方式

[C++] One Simple Trick For Reducing Code Bloat

簡單整理一下這部影片的重點,說明有時候一個小動作會讓 compiler 難以最佳化,然後 code size 就會變大。

2019年2月24日

2019年2月18日

[C++] pinned_vector - Pointer Invalidation Issue on std::vector

pointer invalidation 在 C++ container 是個滿重要 (但很容易被忽略) 的議題,主要原因在於 C++ container 會自己在 runtime 依據使用情況去調整記憶體使用量。也因此,如果用 pointer 去存取 container 中的東西時有時會遇上 container 因為你的操作 (比方說新增/刪除) 導致既有的 pointer 不再合法 (也就是原本指到的地方已經不再是你原本指向的東西,可能已經變成其他的東西或是不能被存取了),這就是所謂的 pointer invalidation,在 C++ reference 上各個 container 的 member function 其實可以看到會有一段在描述 iterator validity,那個就是在講這個議題。

當然,不同方式的 container 在 pointer validity 會有不同的情況 (比方說 std::list 沒有這問題,但是他的 element 就不會是在連續的記憶體上),選用 std container 的時候其實有一部份是要謹慎考量這問題的,因為這攸關使用情境以及效能。這次在 Meeting C++ 2018 看到的 pinned_vector 簡單來說就是提出一個可以滿足最低限度的 pointer validity 的改良版 std::vector