mirror of
https://github.com/teivah/100-go-mistakes.git
synced 2026-06-21 17:07:18 +08:00
Highlight 92
This commit is contained in:
parent
31a3555c87
commit
26fd68e02c
3 changed files with 3 additions and 3 deletions
|
|
@ -96,7 +96,7 @@ So how do we solve false sharing? There are two main solutions.
|
|||
|
||||
The first solution is to use the same approach we’ve shown but ensure that `sumA` and `sumB` aren’t part of the same cache line. For example, we can update the `Result` struct to add _padding_ between the fields. Padding is a technique to allocate extra memory. Because an `int64` requires an 8-byte allocation and a cache line 64 bytes long, we need 64 – 8 = 56 bytes of padding:
|
||||
|
||||
```go
|
||||
```go hl_lines="3"
|
||||
type Result struct {
|
||||
sumA int64
|
||||
_ [56]byte // Padding
|
||||
|
|
|
|||
|
|
@ -924,8 +924,8 @@
|
|||
<p>The first solution is to use the same approach we’ve shown but ensure that <code>sumA</code> and <code>sumB</code> aren’t part of the same cache line. For example, we can update the <code>Result</code> struct to add <em>padding</em> between the fields. Padding is a technique to allocate extra memory. Because an <code>int64</code> requires an 8-byte allocation and a cache line 64 bytes long, we need 64 – 8 = 56 bytes of padding:</p>
|
||||
<div class="language-go highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="kd">type</span><span class="w"> </span><span class="nx">Result</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="p">{</span>
|
||||
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="nx">sumA</span><span class="w"> </span><span class="kt">int64</span>
|
||||
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="nx">_</span><span class="w"> </span><span class="p">[</span><span class="mi">56</span><span class="p">]</span><span class="kt">byte</span><span class="w"> </span><span class="c1">// Padding</span>
|
||||
</span><span id="__span-2-4"><a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="nx">sumB</span><span class="w"> </span><span class="kt">int64</span>
|
||||
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="hll"><span class="w"> </span><span class="nx">_</span><span class="w"> </span><span class="p">[</span><span class="mi">56</span><span class="p">]</span><span class="kt">byte</span><span class="w"> </span><span class="c1">// Padding</span>
|
||||
</span></span><span id="__span-2-4"><a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="nx">sumB</span><span class="w"> </span><span class="kt">int64</span>
|
||||
</span><span id="__span-2-5"><a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="p">}</span>
|
||||
</span></code></pre></div>
|
||||
<p>The next figure shows a possible memory allocation. Using padding, <code>sumA</code> and <code>sumB</code> will always be part of different memory blocks and hence different cache lines.</p>
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Reference in a new issue