動態

列表
創建 時間

從彙編看內存序:C++ 內存模型在 Intel 架構下到底做了什麼

一、引言 在多線程程序中,C++ 內存模型定義了跨線程訪問共享變量時的行為保證。 它規定了不同操作之間的 可見性 與 順序性,通過諸如 memory_order_relaxed、memory_order_release、memory_order_acquire、memory_order_seq_cst 等語義,讓開發者能夠在性能與正確性之間做出權衡。 然而,C++ 的內存模型只是一個

創建 時間

使用gperftools對C++程序進行profile定位性能瓶頸

本文將要學習如何使用gperftools工具定位C/C++程序的性能瓶頸,並用kcachegrind工具進行可視化展示。 gperftools簡介 gperftools(Google Performance Tools)是由谷歌開源的性能分析工具,能夠對程序進行profile,通俗的講就是能夠以一定的頻率對程序的堆棧進行採樣,採樣的次數越高,説明這個堆棧對應的代碼越熱。這個功能對於定位性能瓶頸十分

創建 時間

深入理解 C++ happens-before:高級併發程序員的必修課

一、引言:為什麼需要 happens-before? 在多線程程序中,“語句順序” ≠ “執行順序”。 現代 CPU 和編譯器會對指令重排,只要單線程的結果不變,就可以自由優化。 然而,在併發場景下,這會導致嚴重的問題: bool ready = false; int data = 0; void writer() { data = 42; ready = true;