@@ -301,12 +301,12 @@ class_to_size[size_to_class8[(size+smallSizeDiv-1)/smallSizeDiv]]
301
301
这是 ` Go ` 源码中有关内存分配的两个 ` slice ` 。` class_to_size ` 通过 ` spanClass ` 获取 ` span ` 划分的 ` object ` 大小。而 ` size_to_class8 ` 表示通过 ` size ` 获取它的 ` spanClass ` 。
302
302
303
303
``` golang
304
- var size_to_class8 = [smallSizeMax/smallSizeDiv + 1 ]uint8 {0 , 1 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , 9 , 10 , 10 , 11 , 11 , 12 , 12 , 13 , 13 , 14 , 14 , 15 , 15 , 16 , 16 , 17 , 17 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 21 , 21 , 21 , 21 , 22 , 22 , 22 , 22 , 23 , 23 , 23 , 23 , 24 , 24 , 24 , 24 , 25 , 25 , 25 , 25 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 }
304
+ var size_to_class8 = [smallSizeMax/smallSizeDiv + 1 ]uint8 {0 , 1 , 2 , 3 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , 9 , 10 , 10 , 11 , 11 , 12 , 12 , 13 , 13 , 14 , 14 , 15 , 15 , 16 , 16 , 17 , 17 , 18 , 18 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 21 , 21 , 21 , 21 , 22 , 22 , 22 , 22 , 23 , 23 , 23 , 23 , 24 , 24 , 24 , 24 , 25 , 25 , 25 , 25 , 26 , 26 , 26 , 26 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 }
305
305
306
- var class_to_size = [_NumSizeClasses]uint16 {0 , 8 , 16 , 32 , 48 , 64 , 80 , 96 , 112 , 128 , 144 , 160 , 176 , 192 , 208 , 224 , 240 , 256 , 288 , 320 , 352 , 384 , 416 , 448 , 480 , 512 , 576 , 640 , 704 , 768 , 896 , 1024 , 1152 , 1280 , 1408 , 1536 , 1792 , 2048 , 2304 , 2688 , 3072 , 3200 , 3456 , 4096 , 4864 , 5376 , 6144 , 6528 , 6784 , 6912 , 8192 , 9472 , 9728 , 10240 , 10880 , 12288 , 13568 , 14336 , 16384 , 18432 , 19072 , 20480 , 21760 , 24576 , 27264 , 28672 , 32768 }
306
+ var class_to_size = [_NumSizeClasses]uint16 {0 , 8 , 16 , 24 , 32 , 48 , 64 , 80 , 96 , 112 , 128 , 144 , 160 , 176 , 192 , 208 , 224 , 240 , 256 , 288 , 320 , 352 , 384 , 416 , 448 , 480 , 512 , 576 , 640 , 704 , 768 , 896 , 1024 , 1152 , 1280 , 1408 , 1536 , 1792 , 2048 , 2304 , 2688 , 3072 , 3200 , 3456 , 4096 , 4864 , 5376 , 6144 , 6528 , 6784 , 6912 , 8192 , 9472 , 9728 , 10240 , 10880 , 12288 , 13568 , 14336 , 16384 , 18432 , 19072 , 20480 , 21760 , 24576 , 27264 , 28672 , 32768 }
307
307
```
308
308
309
- 我们传进去的 ` size ` 等于 40。所以 ` (size+smallSizeDiv-1)/smallSizeDiv = 5 ` ;获取 ` size_to_class8 ` 数组中索引为 ` 5 ` 的元素为 ` 4 ` ;获取 ` class_to_size ` 中索引为 ` 4 ` 的元素为 ` 48 ` 。
309
+ 我们传进去的 ` size ` 等于 40。所以 ` (size+smallSizeDiv-1)/smallSizeDiv = 5 ` ;获取 ` size_to_class8 ` 数组中索引为 ` 5 ` 的元素为 ` 5 ` ;获取 ` class_to_size ` 中索引为 ` 5 ` 的元素为 ` 48 ` 。
310
310
311
311
最终,新的 slice 的容量为 ` 6 ` :
312
312
0 commit comments