This commit is contained in:
chai2010
2015-12-21 12:55:18 +08:00
parent 1d7534e3c3
commit 7ec2f7cdc1
152 changed files with 54426 additions and 8958 deletions

View File

@@ -48,7 +48,7 @@
<body>
<div class="book" data-level="13.1" data-chapter-title="unsafe.Sizeof, Alignof 和 Offsetof" data-filepath="ch13/ch13-01.md" data-basepath=".." data-revision="Wed Dec 16 2015 10:54:29 GMT+0800 (中国标准时间)">
<div class="book" data-level="13.1" data-chapter-title="unsafe.Sizeof, Alignof 和 Offsetof" data-filepath="ch13/ch13-01.md" data-basepath=".." data-revision="Mon Dec 21 2015 12:51:02 GMT+0800 (中国标准时间)">
<div class="book-summary">
@@ -146,7 +146,7 @@
<b>0.5.</b>
</a>
@@ -212,7 +212,7 @@
<b>1.3.</b>
査找重的行
査找重的行
</a>
@@ -227,7 +227,7 @@
<b>1.4.</b>
GIF動
GIF動
</a>
@@ -257,7 +257,7 @@
<b>1.6.</b>
穫取多個URL
穫取多個URL
</a>
@@ -479,7 +479,7 @@
<b>3.3.</b>
</a>
@@ -494,7 +494,7 @@
<b>3.4.</b>
爾型
爾型
</a>
@@ -544,7 +544,7 @@
<b>4.</b>
復閤數據類型
複合數據類型
</a>
@@ -857,7 +857,7 @@
<b>6.2.</b>
基於指對象的方法
基於指對象的方法
</a>
@@ -887,7 +887,7 @@
<b>6.4.</b>
方法值和方法達式
方法值和方法達式
</a>
@@ -953,7 +953,7 @@
<b>7.1.</b>
接口是
接口是
</a>
@@ -1073,7 +1073,7 @@
<b>7.9.</b>
示例: 達式求值
示例: 達式求值
</a>
@@ -1103,7 +1103,7 @@
<b>7.11.</b>
基於類型斷言識錯誤類型
基於類型斷言識錯誤類型
</a>
@@ -1214,7 +1214,7 @@
<b>8.2.</b>
示例: 併的Clock服務
示例: 併的Clock服務
</a>
@@ -1229,7 +1229,7 @@
<b>8.3.</b>
示例: 併的Echo服務
示例: 併的Echo服務
</a>
@@ -1274,7 +1274,7 @@
<b>8.6.</b>
示例: 併的Web爬蟲
示例: 併的Web爬蟲
</a>
@@ -1289,7 +1289,7 @@
<b>8.7.</b>
基於select的多路
基於select的多路
</a>
@@ -1304,7 +1304,7 @@
<b>8.8.</b>
示例: 併的字典遍歷
示例: 併的字典遍歷
</a>
@@ -1319,7 +1319,7 @@
<b>8.9.</b>
的退齣
的退齣
</a>
@@ -1354,7 +1354,7 @@
<b>9.</b>
基於共享變量的併
基於共享變量的併
</a>
@@ -1415,7 +1415,7 @@
<b>9.4.</b>
內存
內存
</a>
@@ -1460,7 +1460,7 @@
<b>9.7.</b>
示例: 併的非阻塞緩存
示例: 併的非阻塞緩存
</a>
@@ -1475,7 +1475,7 @@
<b>9.8.</b>
Goroutines和
Goroutines和
</a>
@@ -1748,7 +1748,7 @@
<b>12.1.</b>
何需要反射?
何需要反射?
</a>
@@ -1793,7 +1793,7 @@
<b>12.4.</b>
示例: 編碼S達式
示例: 編碼S達式
</a>
@@ -1823,7 +1823,7 @@
<b>12.6.</b>
示例: 解碼S達式
示例: 解碼S達式
</a>
@@ -1975,50 +1975,14 @@
</li>
<li class="chapter " data-level="14" data-path="exercise/ex.html">
<a href="../exercise/ex.html">
<i class="fa fa-check"></i>
<b>14.</b>
習題解答
</a>
<ul class="articles">
<li class="chapter " data-level="14.1" data-path="exercise/ex-ch1.html">
<a href="../exercise/ex-ch1.html">
<i class="fa fa-check"></i>
<b>14.1.</b>
第一章 入門
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="15" data-path="errata.html">
<li class="chapter " data-level="14" data-path="errata.html">
<a href="../errata.html">
<i class="fa fa-check"></i>
<b>15.</b>
<b>14.</b>
勘誤
</a>
@@ -2060,15 +2024,15 @@
<section class="normal" id="section-">
<h2 id="131-unsafesizeof-alignof-&#x548C;-offsetof">13.1. unsafe.Sizeof, Alignof &#x548C; Offsetof</h2>
<p><code>unsafe.Sizeof</code> &#x51FD;&#x6578;&#x8FD4;&#x8FF4;&#x64CD;&#x4F5C;&#x6578;&#x5728;&#x5167;&#x5B58;&#x7684;&#x5B57;&#x7BC0;&#x5927;&#x5C0F;, &#x53EF;&#x4EE5;&#x662F;&#x4EFB;&#x610F;&#x985E;&#x578B;&#x7684;&#x9336;&#x9054;&#x5F0F;, &#x4F46;&#x662F;&#x4F75;&#x4E0D;&#x6703;&#x5C0D;&#x9336;&#x9054;&#x5F0F;&#x9032;&#x884C;&#x6C42;&#x503C;. <code>Sizeof</code> &#x662F;&#x4E00;&#x500B; uintptr &#x985E;&#x578B;&#x7684;&#x5E38;&#x91CF;&#x9336;&#x9054;&#x5F0F;, &#x56E0;&#x6B64;&#x8FD4;&#x8FF4;&#x7684;&#x7D50;&#x679C;&#x53EF;&#x4EE5;&#x7528;&#x7740;&#x6578;&#x64DA;&#x7684;&#x5927;&#x5C0F;, &#x6216;&#x8005;&#x7528;&#x4F5C;&#x8A08;&#x7B97;&#x5176;&#x4ED6;&#x7684;&#x5E38;&#x91CF;.</p>
<p><code>unsafe.Sizeof</code> &#x51FD;&#x6578;&#x8FD4;&#x8FF4;&#x64CD;&#x4F5C;&#x6578;&#x5728;&#x5167;&#x5B58;&#x7684;&#x5B57;&#x7BC0;&#x5927;&#x5C0F;, &#x53EF;&#x4EE5;&#x662F;&#x4EFB;&#x610F;&#x985E;&#x578B;&#x7684;&#x8868;&#x9054;&#x5F0F;, &#x4F46;&#x662F;&#x4F75;&#x4E0D;&#x6703;&#x5C0D;&#x8868;&#x9054;&#x5F0F;&#x9032;&#x884C;&#x6C42;&#x503C;. <code>Sizeof</code> &#x662F;&#x4E00;&#x500B; uintptr &#x985E;&#x578B;&#x7684;&#x5E38;&#x91CF;&#x8868;&#x9054;&#x5F0F;, &#x56E0;&#x6B64;&#x8FD4;&#x8FF4;&#x7684;&#x7D50;&#x679C;&#x53EF;&#x4EE5;&#x7528;&#x7740;&#x6578;&#x64DA;&#x7684;&#x5927;&#x5C0F;, &#x6216;&#x8005;&#x7528;&#x4F5C;&#x8A08;&#x7B97;&#x5176;&#x4ED6;&#x7684;&#x5E38;&#x91CF;.</p>
<pre><code class="lang-Go"><span class="hljs-keyword">import</span> <span class="hljs-string">&quot;unsafe&quot;</span>
fmt.Println(unsafe.Sizeof(<span class="hljs-typename">float64</span>(<span class="hljs-number">0</span>))) <span class="hljs-comment">// &quot;8&quot;</span>
</code></pre>
<p><code>Sizeof</code> &#x96BB;&#x8FD4;&#x8FF4;&#x6578;&#x64DA;&#x7D50;&#x69CB;&#x4E2D;&#x56FA;&#x5B9A;&#x7684;&#x90E8;&#x5206;, &#x4F8B;&#x5982;&#x5B57;&#x7B26;&#x4E32;&#x4E2D;&#x6307;&#x937C;&#x548C;&#x5B57;&#x7B26;&#x4E32;&#x9577;&#x5EA6;&#x90E8;&#x5206;, &#x4F46;&#x662F;&#x4F75;&#x4E0D;&#x5305;&#x542B;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x5167;&#x5BB9;. Go&#x4E2D;&#x975E;&#x805A;&#x95A4;&#x985E;&#x578B;&#x901A;&#x5E38;&#x6709;&#x4E00;&#x500B;&#x56FA;&#x5B9A;&#x7684;&#x5C3A;&#x5BF8;, &#x76E1;&#x7BA1;&#x4E0D;&#x8855;&#x5DE5;&#x5177;&#x93C8;&#x7684;&#x5177;&#x9AD4;&#x5927;&#x5C0F;&#x53EF;&#x80FD;&#x6703;&#x6709;&#x6240;&#x4E0D;&#x8855;. &#x8003;&#x616E;&#x5230;&#x53EF;&#x79FB;&#x690D;&#x6027;, &#x5F15;&#x7528;&#x985E;&#x578B;&#x6216;&#x5305;&#x542B;&#x5F15;&#x7528;&#x985E;&#x578B;&#x7684;&#x5927;&#x5C0F;&#x5728;32&#x4F4D;&#x5E73;&#x98B1;&#x4E0A;&#x662F;4&#x500B;&#x5B57;&#x7BC0;, &#x5728;64&#x4F4D;&#x5E73;&#x98B1;&#x4E0A;&#x662F;8&#x500B;&#x5B57;&#x7BC0;.</p>
<p>&#x8A08;&#x7B97;&#x6A5F;&#x52A0;&#x8F09;&#x548C;&#x4FDD;&#x5B58;&#x6578;&#x64DA;&#x6642;, &#x5982;&#x679C;&#x5167;&#x5B58;&#x5730;&#x5740;&#x95A4;&#x7406;&#x5730;&#x5C0D;&#x9F4A;&#x7684;&#x5C07;&#x6703;&#x66F4;&#x6709;&#x6548;&#x7387;.
&#x4F8B;&#x5982; 2 &#x5B57;&#x7BC0;&#x5927;&#x5C0F;&#x7684; int16 &#x985E;&#x578B;&#x61C9;&#x8A72;&#x662F;&#x5076;&#x6578;, &#x4E00;&#x500B;4 &#x5B57;&#x7BC0;&#x5927;&#x5C0F;&#x7684; rune &#x985E;&#x578B;&#x5730;&#x5740;&#x61C9;&#x8A72;&#x662F; 4 &#x7684;&#x500D;&#x6578;, &#x4E00;&#x500B; 8 &#x5B57;&#x7BC0;&#x5927;&#x5C0F;&#x7684; float64, uint64 &#x6216; 64-bit &#x6307;&#x937C; &#x7684;&#x5730;&#x5740;&#x61C9;&#x8A72;&#x662F; 8 &#x5B57;&#x7BC0;&#x5C0D;&#x9F4A;&#x7684;. &#x4F46;&#x662F;&#x5C0D;&#x65BC;&#x518D;&#x5927;&#x7684;&#x5730;&#x5740;&#x5C0D;&#x9F4A;&#x500D;&#x6578;&#x5247;&#x662F;&#x4E0D;&#x9700;&#x8981;&#x7684;,
<p><code>Sizeof</code> &#x96BB;&#x8FD4;&#x8FF4;&#x6578;&#x64DA;&#x7D50;&#x69CB;&#x4E2D;&#x56FA;&#x5B9A;&#x7684;&#x90E8;&#x5206;, &#x4F8B;&#x5982;&#x5B57;&#x7B26;&#x4E32;&#x4E2D;&#x6307;&#x91DD;&#x548C;&#x5B57;&#x7B26;&#x4E32;&#x9577;&#x5EA6;&#x90E8;&#x5206;, &#x4F46;&#x662F;&#x4F75;&#x4E0D;&#x5305;&#x542B;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x5167;&#x5BB9;. Go&#x4E2D;&#x975E;&#x805A;&#x5408;&#x985E;&#x578B;&#x901A;&#x5E38;&#x6709;&#x4E00;&#x500B;&#x56FA;&#x5B9A;&#x7684;&#x5C3A;&#x5BF8;, &#x76E1;&#x7BA1;&#x4E0D;&#x540C;&#x5DE5;&#x5177;&#x93C8;&#x7684;&#x5177;&#x9AD4;&#x5927;&#x5C0F;&#x53EF;&#x80FD;&#x6703;&#x6709;&#x6240;&#x4E0D;&#x540C;. &#x8003;&#x616E;&#x5230;&#x53EF;&#x79FB;&#x690D;&#x6027;, &#x5F15;&#x7528;&#x985E;&#x578B;&#x6216;&#x5305;&#x542B;&#x5F15;&#x7528;&#x985E;&#x578B;&#x7684;&#x5927;&#x5C0F;&#x5728;32&#x4F4D;&#x5E73;&#x98B1;&#x4E0A;&#x662F;4&#x500B;&#x5B57;&#x7BC0;, &#x5728;64&#x4F4D;&#x5E73;&#x98B1;&#x4E0A;&#x662F;8&#x500B;&#x5B57;&#x7BC0;.</p>
<p>&#x8A08;&#x7B97;&#x6A5F;&#x52A0;&#x8F09;&#x548C;&#x4FDD;&#x5B58;&#x6578;&#x64DA;&#x6642;, &#x5982;&#x679C;&#x5167;&#x5B58;&#x5730;&#x5740;&#x5408;&#x7406;&#x5730;&#x5C0D;&#x9F4A;&#x7684;&#x5C07;&#x6703;&#x66F4;&#x6709;&#x6548;&#x7387;.
&#x4F8B;&#x5982; 2 &#x5B57;&#x7BC0;&#x5927;&#x5C0F;&#x7684; int16 &#x985E;&#x578B;&#x61C9;&#x8A72;&#x662F;&#x5076;&#x6578;, &#x4E00;&#x500B;4 &#x5B57;&#x7BC0;&#x5927;&#x5C0F;&#x7684; rune &#x985E;&#x578B;&#x5730;&#x5740;&#x61C9;&#x8A72;&#x662F; 4 &#x7684;&#x500D;&#x6578;, &#x4E00;&#x500B; 8 &#x5B57;&#x7BC0;&#x5927;&#x5C0F;&#x7684; float64, uint64 &#x6216; 64-bit &#x6307;&#x91DD; &#x7684;&#x5730;&#x5740;&#x61C9;&#x8A72;&#x662F; 8 &#x5B57;&#x7BC0;&#x5C0D;&#x9F4A;&#x7684;. &#x4F46;&#x662F;&#x5C0D;&#x65BC;&#x518D;&#x5927;&#x7684;&#x5730;&#x5740;&#x5C0D;&#x9F4A;&#x500D;&#x6578;&#x5247;&#x662F;&#x4E0D;&#x9700;&#x8981;&#x7684;,
&#x537D;&#x4F7F;&#x662F; complex128 &#x7B49;&#x8F03;&#x5927;&#x7684;&#x6578;&#x64DA;&#x985E;&#x578B;.</p>
<p>&#x7531;&#x65BC;&#x9019;&#x500B;&#x56E0;&#x7D20;,&#x4E00;&#x500B;&#x805A;&#x95A4;&#x985E;&#x578B;(&#x7D50;&#x69CB;&#x9AD4;&#x6216;&#x6578;&#x7D44;)&#x7684;&#x5927;&#x5C0F;&#x81F3;&#x5C11;&#x662F;&#x6240;&#x6709;&#x5B57;&#x6BB5;&#x6216;&#x5143;&#x7D20;&#x5927;&#x5C0F;&#x7684;&#x7E3D;&#x548C;, &#x6216;&#x8005;&#x66F4;&#x5927;&#x56E0;&#x70BA;&#x53EF;&#x80FD;&#x5B58;&#x5728;&#x7A7A;&#x6D1E;. &#x7A7A;&#x6D1E;&#x662F;&#x7DE8;&#x8B6F;&#x5668;&#x81EA;&#x52D5;&#x6DFB;&#x52A0;&#x7684;&#x6C92;&#x6709;&#x88AB;&#x4F7F;&#x7528;&#x7684;&#x7A7A;&#x9593;, &#x7528;&#x65BC;&#x4FDD;&#x8B49;&#x5F8C;&#x9EAB;&#x6BCF;&#x500B;&#x5B57;&#x6BB5;&#x6216;&#x5143;&#x7D20;&#x7684;&#x5730;&#x5740;&#x76F8;&#x5C0D;&#x65BC;&#x7D50;&#x69CB;&#x6216;&#x6578;&#x7D44;&#x7684;&#x958B;&#x59CB;&#x5730;&#x5740;&#x80FD;&#x5920;&#x95A4;&#x7406;&#x5730;&#x5C0D;&#x9F4A;.</p>
<p>&#x7531;&#x65BC;&#x9019;&#x500B;&#x56E0;&#x7D20;,&#x4E00;&#x500B;&#x805A;&#x5408;&#x985E;&#x578B;(&#x7D50;&#x69CB;&#x9AD4;&#x6216;&#x6578;&#x7D44;)&#x7684;&#x5927;&#x5C0F;&#x81F3;&#x5C11;&#x662F;&#x6240;&#x6709;&#x5B57;&#x6BB5;&#x6216;&#x5143;&#x7D20;&#x5927;&#x5C0F;&#x7684;&#x7E3D;&#x548C;, &#x6216;&#x8005;&#x66F4;&#x5927;&#x56E0;&#x7232;&#x53EF;&#x80FD;&#x5B58;&#x5728;&#x7A7A;&#x6D1E;. &#x7A7A;&#x6D1E;&#x662F;&#x7DE8;&#x8B6F;&#x5668;&#x81EA;&#x52D5;&#x6DFB;&#x52A0;&#x7684;&#x6C92;&#x6709;&#x88AB;&#x4F7F;&#x7528;&#x7684;&#x7A7A;&#x9593;, &#x7528;&#x65BC;&#x4FDD;&#x8B49;&#x5F8C;&#x9762;&#x6BCF;&#x500B;&#x5B57;&#x6BB5;&#x6216;&#x5143;&#x7D20;&#x7684;&#x5730;&#x5740;&#x76F8;&#x5C0D;&#x65BC;&#x7D50;&#x69CB;&#x6216;&#x6578;&#x7D44;&#x7684;&#x958B;&#x59CB;&#x5730;&#x5740;&#x80FD;&#x5920;&#x5408;&#x7406;&#x5730;&#x5C0D;&#x9F4A;.</p>
<table>
<thead>
<tr>
@@ -2119,14 +2083,14 @@ fmt.Println(unsafe.Sizeof(<span class="hljs-typename">float64</span>(<span class
</tr>
</tbody>
</table>
<p>Go&#x7684;&#x8A9E;&#x8A00;&#x898F;&#x7BC4;&#x4F75;&#x6C92;&#x6709;&#x4FDD;&#x8B49;&#x4E00;&#x500B;&#x5B57;&#x6BB5;&#x7684;&#x8072;&#x660E;&#x9806;&#x5E8F;&#x548C;&#x5167;&#x5B58;&#x4E2D;&#x7684;&#x9806;&#x5E8F;&#x662F;&#x4E00;&#x7DFB;&#x7684;, &#x6240;&#x4EE5;&#x7406;&#x8AD6;&#x4E0A;&#x4E00;&#x500B;&#x7DE8;&#x8B6F;&#x5668;&#x53EF;&#x4EE5;&#x96A8;&#x610F;&#x5730;&#x91CD;&#x65B0;&#x6392;&#x5217;&#x6BCF;&#x500B;&#x5B57;&#x6BB5;&#x7684;&#x5167;&#x5B58;&#x4F48;&#x4FB7;, &#x96A8;&#x7740;&#x5728;&#x5BEB;&#x4F5C;&#x672C;&#x66F8;&#x7684;&#x6642;&#x5019;&#x7DE8;&#x8B6F;&#x5668;&#x9084;&#x6C92;&#x6709;&#x9019;&#x9EBC;&#x505A;. &#x4E0B;&#x9EAB;&#x7684;&#x4E09;&#x500B;&#x7D50;&#x69CB;&#x9AD4;&#x6709;&#x7740;&#x76F8;&#x8855;&#x7684;&#x5B57;&#x6BB5;, &#x4F46;&#x662F;&#x7B2C;&#x4E00;&#x500B;&#x6BD4;&#x53E6;&#x5916;&#x7684;&#x5169;&#x500B;&#x9700;&#x8981;&#x591A; 50% &#x7684;&#x5167;&#x5B58;.</p>
<p>Go&#x7684;&#x8A9E;&#x8A00;&#x898F;&#x8303;&#x4F75;&#x6C92;&#x6709;&#x4FDD;&#x8B49;&#x4E00;&#x500B;&#x5B57;&#x6BB5;&#x7684;&#x8072;&#x660E;&#x9806;&#x5E8F;&#x548C;&#x5167;&#x5B58;&#x4E2D;&#x7684;&#x9806;&#x5E8F;&#x662F;&#x4E00;&#x81F4;&#x7684;, &#x6240;&#x4EE5;&#x7406;&#x8AD6;&#x4E0A;&#x4E00;&#x500B;&#x7DE8;&#x8B6F;&#x5668;&#x53EF;&#x4EE5;&#x96A8;&#x610F;&#x5730;&#x91CD;&#x65B0;&#x6392;&#x5217;&#x6BCF;&#x500B;&#x5B57;&#x6BB5;&#x7684;&#x5167;&#x5B58;&#x5E03;&#x5C40;, &#x96A8;&#x7740;&#x5728;&#x5BEB;&#x4F5C;&#x672C;&#x66F8;&#x7684;&#x6642;&#x5019;&#x7DE8;&#x8B6F;&#x5668;&#x9084;&#x6C92;&#x6709;&#x9019;&#x9EBD;&#x505A;. &#x4E0B;&#x9762;&#x7684;&#x4E09;&#x500B;&#x7D50;&#x69CB;&#x9AD4;&#x6709;&#x7740;&#x76F8;&#x540C;&#x7684;&#x5B57;&#x6BB5;, &#x4F46;&#x662F;&#x7B2C;&#x4E00;&#x500B;&#x6BD4;&#x53E6;&#x5916;&#x7684;&#x5169;&#x500B;&#x9700;&#x8981;&#x591A; 50% &#x7684;&#x5167;&#x5B58;.</p>
<pre><code class="lang-Go"> <span class="hljs-comment">// 64-bit 32-bit</span>
<span class="hljs-keyword">struct</span>{ <span class="hljs-typename">bool</span>; <span class="hljs-typename">float64</span>; <span class="hljs-typename">int16</span> } <span class="hljs-comment">// 3 words 4words</span>
<span class="hljs-keyword">struct</span>{ <span class="hljs-typename">float64</span>; <span class="hljs-typename">int16</span>; <span class="hljs-typename">bool</span> } <span class="hljs-comment">// 2 words 3words</span>
<span class="hljs-keyword">struct</span>{ <span class="hljs-typename">bool</span>; <span class="hljs-typename">int16</span>; <span class="hljs-typename">float64</span> } <span class="hljs-comment">// 2 words 3words</span>
</code></pre>
<p>&#x96D6;&#x7136;&#x95DC;&#x65BC;&#x5C0D;&#x9F4A;&#x7B97;&#x6CD5;&#x7684;&#x7D30;&#x7BC0;&#x8D85;&#x9F63;&#x4E86;&#x672C;&#x66F8;&#x7684;&#x7BC4;&#x570D;, &#x4E5F;&#x4E0D;&#x662F;&#x6BCF;&#x4E00;&#x500B;&#x7D50;&#x69CB;&#x9AD4;&#x90FD;&#x9700;&#x8981;&#x64D4;&#x5FC3;&#x9019;&#x500B;&#x554F;&#x984C;, &#x4E0D;&#x904E;&#x6709;&#x6548;&#x7684;&#x5305;&#x88DD;&#x53EF;&#x4EE5;&#x4F7F;&#x6578;&#x64DA;&#x7D50;&#x69CB;&#x66F4;&#x52A0;&#x7DCA;&#x6E4A;, &#x5167;&#x5B58;&#x4F7F;&#x7528;&#x7387;&#x548C;&#x6027;&#x80FD;&#x90FD;&#x53EF;&#x80FD;&#x53D7;&#x76CA;.</p>
<p><code>unsafe.Alignof</code> &#x51FD;&#x6578;&#x8FD4;&#x8FF4;&#x5C0D;&#x61C9;&#x53C3;&#x6578;&#x7684;&#x985E;&#x578B;&#x9700;&#x8981;&#x5C0D;&#x9F4A;&#x7684;&#x500D;&#x6578;. &#x548C; Sizeof &#x985E;&#x4F3C;, Alignof &#x4E5F;&#x662F;&#x8FD4;&#x8FF4;&#x4E00;&#x500B;&#x5E38;&#x91CF;&#x9336;&#x9054;&#x5F0F;, &#x5C0D;&#x61C9;&#x4E00;&#x500B;&#x5E38;&#x91CF;. &#x901A;&#x5E38;&#x60C5;&#x6CC1;&#x4E0B;&#x4F48;&#x723E;&#x548C;&#x6578;&#x5B57;&#x985E;&#x578B;&#x9700;&#x8981;&#x5C0D;&#x9F4A;&#x5230;&#x5B83;&#x5011;&#x672C;&#x8EAB;&#x7684;&#x5927;&#x5C0F;(&#x6700;&#x591A;8&#x500B;&#x5B57;&#x7BC0;), &#x5176;&#x5B83;&#x7684;&#x985E;&#x578B;&#x5C0D;&#x9F4A;&#x5230;&#x6A5F;&#x5668;&#x5B57;&#x5927;&#x5C0F;.</p>
<p>&#x96D6;&#x7136;&#x95DC;&#x65BC;&#x5C0D;&#x9F4A;&#x7B97;&#x6CD5;&#x7684;&#x7D30;&#x7BC0;&#x8D85;&#x9F63;&#x4E86;&#x672C;&#x66F8;&#x7684;&#x8303;&#x570D;, &#x4E5F;&#x4E0D;&#x662F;&#x6BCF;&#x4E00;&#x500B;&#x7D50;&#x69CB;&#x9AD4;&#x90FD;&#x9700;&#x8981;&#x64D4;&#x5FC3;&#x9019;&#x500B;&#x554F;&#x984C;, &#x4E0D;&#x904E;&#x6709;&#x6548;&#x7684;&#x5305;&#x88DD;&#x53EF;&#x4EE5;&#x4F7F;&#x6578;&#x64DA;&#x7D50;&#x69CB;&#x66F4;&#x52A0;&#x7DCA;&#x6E4A;, &#x5167;&#x5B58;&#x4F7F;&#x7528;&#x7387;&#x548C;&#x6027;&#x80FD;&#x90FD;&#x53EF;&#x80FD;&#x53D7;&#x76CA;.</p>
<p><code>unsafe.Alignof</code> &#x51FD;&#x6578;&#x8FD4;&#x8FF4;&#x5C0D;&#x61C9;&#x53C3;&#x6578;&#x7684;&#x985E;&#x578B;&#x9700;&#x8981;&#x5C0D;&#x9F4A;&#x7684;&#x500D;&#x6578;. &#x548C; Sizeof &#x985E;&#x4F3C;, Alignof &#x4E5F;&#x662F;&#x8FD4;&#x8FF4;&#x4E00;&#x500B;&#x5E38;&#x91CF;&#x8868;&#x9054;&#x5F0F;, &#x5C0D;&#x61C9;&#x4E00;&#x500B;&#x5E38;&#x91CF;. &#x901A;&#x5E38;&#x60C5;&#x6CC1;&#x4E0B;&#x5E03;&#x723E;&#x548C;&#x6578;&#x5B57;&#x985E;&#x578B;&#x9700;&#x8981;&#x5C0D;&#x9F4A;&#x5230;&#x5B83;&#x5011;&#x672C;&#x8EAB;&#x7684;&#x5927;&#x5C0F;(&#x6700;&#x591A;8&#x500B;&#x5B57;&#x7BC0;), &#x5176;&#x5B83;&#x7684;&#x985E;&#x578B;&#x5C0D;&#x9F4A;&#x5230;&#x6A5F;&#x5668;&#x5B57;&#x5927;&#x5C0F;.</p>
<p><code>unsafe.Offsetof</code> &#x51FD;&#x6578;&#x7684;&#x53C3;&#x6578;&#x5FC5;&#x9B1A;&#x662F;&#x4E00;&#x500B;&#x5B57;&#x6BB5; <code>x.f</code>, &#x7136;&#x5F8C;&#x8FD4;&#x8FF4; <code>f</code> &#x5B57;&#x6BB5;&#x76F8;&#x5C0D;&#x65BC; <code>x</code> &#x8D77;&#x59CB;&#x5730;&#x5740;&#x7684;&#x504F;&#x79FB;&#x91CF;, &#x5305;&#x62EC;&#x53EF;&#x80FD;&#x7684;&#x7A7A;&#x6D1E;.</p>
<p>&#x5716; 13.1 &#x986F;&#x793A;&#x4E86;&#x4E00;&#x500B;&#x7D50;&#x69CB;&#x9AD4;&#x8B8A;&#x91CF; x &#x4EE5;&#x53CA;&#x5176;&#x5728;32&#x4F4D;&#x548C;64&#x4F4D;&#x6A5F;&#x5668;&#x4E0A;&#x7684;&#x5178;&#x578B;&#x7684;&#x5167;&#x5B58;. &#x7070;&#x8272;&#x5340;&#x57DF;&#x662F;&#x7A7A;&#x6D1E;.</p>
<pre><code class="lang-Go"><span class="hljs-keyword">var</span> x <span class="hljs-keyword">struct</span> {
@@ -2136,7 +2100,7 @@ fmt.Println(unsafe.Sizeof(<span class="hljs-typename">float64</span>(<span class
}
</code></pre>
<p>The table below shows the results of applying the three unsafe functions to x itself and to each of its three &#xFB01;elds:</p>
<p>&#x4E0B;&#x9EAB;&#x986F;&#x793A;&#x4E86;&#x61C9;&#x7528;&#x4E09;&#x500B;&#x51FD;&#x6578;&#x5C0D; x &#x548C;&#x5B83;&#x7684;&#x4E09;&#x500B;&#x5B57;&#x6BB5;&#x8A08;&#x7B97;&#x7684;&#x7D50;&#x679C;:</p>
<p>&#x4E0B;&#x9762;&#x986F;&#x793A;&#x4E86;&#x61C9;&#x7528;&#x4E09;&#x500B;&#x51FD;&#x6578;&#x5C0D; x &#x548C;&#x5B83;&#x7684;&#x4E09;&#x500B;&#x5B57;&#x6BB5;&#x8A08;&#x7B97;&#x7684;&#x7D50;&#x679C;:</p>
<p><img src="../images/ch13-01.png" alt=""></p>
<p>32&#x4F4D;&#x7E6B;&#x7D71;:</p>
<pre><code>Sizeof(x) = 16 Alignof(x) = 4
@@ -2149,7 +2113,7 @@ Sizeof(x.a) = 1 Alignof(x.a) = 1 Offsetof(x.a) = 0
Sizeof(x.b) = 2 Alignof(x.b) = 2 Offsetof(x.b) = 2
Sizeof(x.c) = 24 Alignof(x.c) = 8 Offsetof(x.c) = 8
</code></pre><p>&#x96D6;&#x7136;&#x5B83;&#x5011;&#x5728;&#x4E0D;&#x5B89;&#x5168;&#x7684; unsafe &#x5305;, &#x4F46;&#x662F;&#x9019;&#x5E7E;&#x500B;&#x51FD;&#x6578;&#x4F75;&#x4E0D;&#x662F;&#x771E;&#x7684;&#x4E0D;&#x5B89;&#x5168;,
&#x7279;&#x5F46;&#x5728;&#x9700;&#x8981;&#x512A;&#x5316;&#x5167;&#x5B58;&#x7A7A;&#x9593;&#x6642;&#x5B83;&#x5011;&#x5C0D;&#x65BC;&#x7406;&#x89E3;&#x539F;&#x751F;&#x7684;&#x5167;&#x5B58;&#x4F48;&#x4FB7;&#x5F88;&#x6709;&#x5E6B;&#x52A9;.</p>
&#x7279;&#x522B;&#x5728;&#x9700;&#x8981;&#x512A;&#x5316;&#x5167;&#x5B58;&#x7A7A;&#x9593;&#x6642;&#x5B83;&#x5011;&#x5C0D;&#x65BC;&#x7406;&#x89E3;&#x539F;&#x751F;&#x7684;&#x5167;&#x5B58;&#x5E03;&#x5C40;&#x5F88;&#x6709;&#x5E6B;&#x52A9;.</p>
</section>