返回介绍

上卷 程序设计

中卷 标准库

下卷 运行时

源码剖析

附录

2.1 定义

发布于 2024-10-12 19:16:02 字数 1182 浏览 0 评论 0 收藏 0

页大小定义(非物理页)。

// sizeclasses.go, malloc.go

_PageShift = 13
_PageSize  = 1 << _PageShift     // 8K, 8192

对象按 8 字节对齐,依大小分成 67 种。

// sizeclasses.go

_NumSizeClasses = 67
// Code generated by mksizeclasses.go; DO NOT EDIT.

// class  bytes/obj  bytes/span  objects  tail waste  max waste
//     1          8        8192     1024           0     87.50%
//     2         16        8192      512           0     43.75%
//     3         32        8192      256           0     46.88%
//     4         48        8192      170          32     31.52%
//    ...
//    64      27264       81920        3         128     10.00%
//    65      28672       57344        2           0      4.91%
//    66      32768       32768        1           0     12.50%

class 0 : large object.

小于等于 32 KB 的为小对象,大于的是大对象。

// sizeclasses.go

_MaxSmallSize   = 32768

使用静态转换表(class to size)。

// sizeclasses.go

var class_to_size = [_NumSizeClasses]uint16{0, 8, 16, 32, 48, ..., 28672, 32768}
var class_to_allocnpages = [_NumSizeClasses]uint8{0, 1, 1, 1, 1, 1, 1, ..., 7, 4}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文