Golang内存分配分三种Golang内存分配分三种类型
Golang内存分配分三种类型
线程缓存(Thread Cache)
- 拟人化解释:线程缓存就像是每个邮局员工的私人储物柜。每个员工都有自己的储物柜,用来暂时存放需要处理的小信件和包裹。当有新的信件或包裹需要处理时,员工会先看看自己的储物柜里是否有足够的空间。如果有,就把这些信件和包裹放进储物柜里,这样可以快速拿取和处理,效率非常高。
- 优势:快速存取,减少争用,适合小对象。
中心缓存(Central Cache)
- 拟人化解释:中心缓存就像是邮局的共享存储区。这个区域是为员工们准备的,当他们的私人储物柜(线程缓存)满了,或者他们需要更多的空间时,就会将信件和包裹放到中心缓存中,或者从中心缓存中取出需要处理的信件和包裹。中心缓存管理着较大的存储空间,可以有效地共享和分配资源。
- 优势:提供较大的共享存储,适合中等大小的对象,减轻堆的负担。
堆分配内存(Heap Allocation)
- 拟人化解释:堆分配内存就像是邮局的主仓库。所有无法在员工的私人储物柜或中心缓存中处理的大型包裹,都会直接送到主仓库。这里有足够的空间和资源来处理这些大包裹,但由于仓库很大,处理效率可能会比私人储物柜和中心缓存稍低一些。
- 优势:适合大对象,提供最大的存储空间和资源,但存取速度相对较慢。
总结
在Golang的内存分配中:
- 线程缓存(私人储物柜)用于快速处理和存储小对象。
- 中心缓存(共享存储区)用于处理中等大小的对象,提供共享和高效的资源分配。
- 堆分配内存(主仓库)用于处理大对象,提供最大的存储空间和资源。
计算机内存类型
1. 栈内存(Stack Memory)
- 拟人化解释:栈内存就像是每个员工的个人工作台。员工在处理每个任务(函数调用)时,会在工作台上放置所需的工具(局部变量和参数)。完成任务后,员工会立即清理工作台,把工具收回原位。这样,工作台始终保持整洁有序,适合快速处理临时任务。
2. 堆内存(Heap Memory)
- 拟人化解释:堆内存就像是邮局的主仓库。这个仓库用来存放所有需要长期保存的大包裹(大对象和数据结构)。虽然仓库空间很大,但需要邮局管理员(内存管理器)小心记录每个包裹的位置,确保以后能找到和处理这些包裹。由于仓库管理复杂,处理速度不如个人工作台。
3. 全局/静态内存(Global/Static Memory)
- 拟人化解释:全局/静态内存就像是邮局的公共工具柜。这个工具柜里放着所有员工都可能需要用到的常用工具(全局变量和静态变量)。这些工具从邮局开张(程序启动)时就准备好了,并且会一直存在到邮局关门(程序结束)。
4. 代码段(Code Segment)
- 拟人化解释:代码段就像是邮局的操作手册。这本手册包含了邮局所有的操作指南(程序代码),员工们按照这些指南处理各种任务。操作手册是只读的,不能在使用过程中随意更改。
5. BSS段(Block Started by Symbol Segment)
- 拟人化解释:BSS段就像是邮局的空货架。这些货架预留给那些未来可能会用到但目前还没有具体内容的物品(未初始化的全局变量和静态变量)。邮局开张(程序加载)时,这些货架会自动初始化为零,等待将来使用。
6. 数据段(Data Segment)
- 拟人化解释:数据段就像是邮局的指定物品区。这一区域存放着那些在邮局开张(程序启动)时就已经准备好的物品(已初始化的全局变量和静态变量)。这些物品一开始就有确定的值,并且在邮局开张时就摆放在合适的位置。
总结
- 栈内存:个人工作台,快速处理临时任务。
- 堆内存:主仓库,存放大包裹,需小心管理。
- 全局/静态内存:公共工具柜,存放常用工具,随时可用。
- 代码段:操作手册,包含所有操作指南,不能更改。
- BSS段:空货架,预留给未来可能用到的物品,开张时初始化为零。
- 数据段:指定物品区,存放已准备好的物品,开张时就位。
这样,每种内存类型的功能和位置就变得更加直观和易于理解了。
golang中的线程缓存 中心缓存 堆分配内存 分别放在以上哪里
ChatGPT
在Golang的内存分配机制中,线程缓存、中心缓存和堆分配内存分别对应于上述拟人化解释中的特定区域。为了更好地理解它们的位置和角色,可以如下拟人化解释:
线程缓存(Thread Cache)
- 位置:每个线程自己的内存区域。
- 对应于:个人工作台(栈内存)。
- 拟人化解释:线程缓存就像是每个员工在个人工作台旁边放置的一个小抽屉。这个抽屉里存放着员工经常使用的小工具(小对象),方便员工快速取用和存放。这使得员工在处理任务时,可以非常高效地使用这些小工具,不需要频繁去公共工具柜或主仓库找东西。
中心缓存(Central Cache)
- 位置:进程级别的全局共享内存区域。
- 对应于:类似于个人工作台和主仓库之间的一个中转站,但不完全对应于上述具体某一个区域。
- 拟人化解释:中心缓存就像是邮局的中转区。员工如果发现自己的小抽屉(线程缓存)装不下更多的小工具时,会把这些工具放到中转区(中心缓存),或从中转区拿取工具。这个中转区帮助员工之间共享工具,减少直接去主仓库(堆分配内存)取东西的次数,提升整体工作效率。
堆分配内存(Heap Allocation)
- 位置:全局的堆内存区域,是进程级别的存储空间。
- 对应于:主仓库(堆内存)。
- 拟人化解释:堆分配内存就像是邮局的主仓库。所有需要长期保存的大包裹(大对象)以及那些无法在小抽屉(线程缓存)和中转区(中心缓存)处理的物品,都会存放在主仓库。虽然仓库空间大,但管理复杂,需要仔细记录和安排每个包裹的位置。
总结
- 线程缓存(Thread Cache):个人工作台旁边的小抽屉,存放常用的小工具(小对象),方便快速取用和存放。
- 中心缓存(Central Cache):邮局的中转区,员工之间共享工具,减少去主仓库(堆分配内存)取东西的次数,提升整体效率。
- 堆分配内存(Heap Allocation):邮局的主仓库,存放长期保存的大包裹和无法在小抽屉和中转区处理的物品。
相关文章:
Golang内存分配分三种Golang内存分配分三种类型
Golang内存分配分三种类型 线程缓存(Thread Cache) 拟人化解释:线程缓存就像是每个邮局员工的私人储物柜。每个员工都有自己的储物柜,用来暂时存放需要处理的小信件和包裹。当有新的信件或包裹需要处理时,员工会先看看…...

Marin说PCB之如何在主板上补偿链路中的走线的等长误差?
一场雨把我困在这里,你冷漠地看我没有穿雨衣淋成落汤鸡。今天刚刚出门时候看天气预报没有雨,于是我就没有带雨衣骑电动车去公司了,谁知道回来的路上被淋成狗了。天气预报就像是女人的脾气那样,不能完全相信的。 好了,我…...

企业在现代市场中的战略:通过数据可视化提升财务决策
新时代,财务规划团队不仅仅是企业内部的一个部门,更是帮助企业做出明智决策和设定战略目标的中坚力量。在当今瞬息万变的商业环境中,财务专业人士需要具备应对挑战并引导企业走向成功的角色职能。企业领导者时常面临着数据压力,需…...
printf(“不喝酒就没得朋友可是只要偶一喝酒就喝倒一代朋友人生真的很矛盾“);
/*无线通讯语言模块测试PAST 2019 12 28 L298 CODE1871**/ #include <REG52.H> #include <intrins.H> #include "stdio.h" #define uint unsigned int #defi…...

JAVA小案例-分别计算100以内奇数和偶数的和
JAVA小案例-分别计算100以内奇数和偶数的和 没啥可说的,就是for循环加if分支,也可以用while写。 代码如下: public class Jiouhe {/*** 分别计算100以内奇数和偶数的和* param args*/public static void main(String[] args){int sum10;in…...
头歌初识redis答案
头歌初识Redis的答案可以从多个方面进行归纳和总结。以下是根据参考文章提供的信息,按照清晰、分点表示和归纳的方式给出的答案: 一、Redis基础知识 Redis有16个数据库,默认使用第0个数据库,可以用select命令进行切换。 Redis是…...

Linux.小技巧快捷键
1. ctrl c 强制停止 终止某些程序的运行 也可以取消某行命令 2. ctrl d 退出或登出 进入python环境中,使用ctrl d 退出 3.history 查看历史使用了哪些命令 4. ! 历史最近使用的命令的开头 5.使用ctrl r 搜索历史使用的命令 按下 ctrl r 会进入 reverse -…...

传统的老程序员转向人工智能需要准备好这三件事情,你知道吗?
前言 人类文明的进步有时候快的吓人,在我们父辈上街买菜还是以一毛为计量买菜的时代,其实过去了也没有多长时间。现在买菜接近10块为准了,正常在集市上喊着怎么卖?摊主喊着三斤,包含的意思是10块钱三斤。相隔这么多年…...

ICPC2024 邀请赛西安站(7/8/13)
心得 [ICPC2024 Xian I] ICPC2024 邀请赛西安站重现赛 - 比赛详情 - 洛谷 7表示赛时ac了7个,8表示含补题总共ac数,13表示题目总数 题目 M. Chained Lights 打表,发现只有k1是YES //#include <bits/stdc.h> #include<iostream&…...

STM32f103实现按键长按 短按 双击
今天来分享一个使用EXIT外部中断加TIM计时器实现按键长短按以及双击操作,不过笔者在双击上有点瑕疵,就是当你按下双击第一下停顿几秒按第二下依然会识别为双击操作,笔者猜测只要板子不停电即便到第二天按下第二下依旧会识别双击操作ÿ…...

【WP】猿人学13_入门级cookie
https://match.yuanrenxue.cn/match/13 抓包分析 抓包分析发现加密参数是cookie中有一个yuanrenxue_cookie 当cookie过期的时候,就会重新给match/13发包,这个包返回一段js代码,应该是生成cookie的 <script>document.cookie(y)(u)(a…...
分享一款提取抖音小店商家电话的软件使用教程
抖音作为一款国内非常流行的短视频分享平台,吸引了大量用户和商家。许多商家在抖音上开设了小店,但是抖音并没有提供直接获取商家电话的功能。本文将分享一款提取抖音小店商家电话的软件,并附带使用教程和代码。 教程 步骤一:安…...

反转链表的三种方法--面试必考(图例超详细解析,小白一看就会!!!)
目录 一、前言 二、题目描述 三、解题方法 ⭐ 头插法 --- 创建新的链表 ⭐ 迭代法 --- 三指针 ⭐ 递归法 四、总结与提炼 五、共勉 一、前言 反转链表这道题,可以说是--链表专题--,最经典的一道题,也是在面试中频率最高的一道题目&…...

Springboot注意点
1.Usermapper里加param注解 2.RequestParam 和 RequestBody的区别: RequestParam 和 RequestBody的区别: RequestParam 和 RequestBody 是Spring框架中用于处理HTTP请求的两个不同的注 get请求一般用url传参数,所以参数名和参数的值就在ur…...

数组和指针的联系(C语言)
数组和指针是两种不同的数据类型,数组是一种构造类型,用于存储一组相同类型的变量;而指针是一种特殊类型,专门用来存放数据的地址。数组名除了sizeof(数组名)和&数组名表示整个数组外,其他情况下都表示的是首元素的…...
安全区域边界
文章目录 安全区域边界边界防护跨边界流量通过受控接口通信非法内联非法外联限制无线网络 访问控制启用基于白名单的访问控制策略优化访问控制表根据五元组控制根据会话状态控制根据应用协议和内容控制 入侵防范外部发起的攻击内部发起的攻击对新型攻击防范及时检测攻击行为 恶…...
力扣每日一题 6/6
2938.区分黑球与白球[中等] 题目: 桌子上有 n 个球,每个球的颜色不是黑色,就是白色。 给你一个长度为 n 、下标从 0 开始的二进制字符串 s,其中 1 和 0 分别代表黑色和白色的球。 在每一步中,你可以选择两个相邻的…...
游戏心理学Day05
第三章 游戏即学习 《超级马里奥》是游戏史上的经典之作,我们都记得第一次踩到敌人,第一次顶碎砖块时的快乐,也记得为了通过某个关卡而付出的努力和艰辛。当我们掌握了规律和技巧之后,这些难题就不再是难题,因为我们习…...

【C、C++编译工具】CLion工具介绍与安装
一、问题 最近突发奇想想学学最开始接触的语言C,之前大学的时候用的更多的工具还是VC,工作后慢慢接触了CLion,跟pycharm其实差不多,都是集成开发环境(IDE) 解释:什么是 IDE? 根据计…...

LabVIEW中进行步进电机的位置控制
在LabVIEW中进行步进电机的位置控制,通常涉及以下几个关键步骤:设置硬件、配置通信、编写控制算法和实施反馈控制。以下是一个详细的介绍。 硬件设置 步进电机:选择合适的步进电机,根据负载和应用需求选择适当的步数和转矩。 驱…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...