`

pg的内存管理机制十一:初始化共享内存shared memory及其哈希表索引

阅读更多

pg 的内存处理 AllocSet/MemoryContext 外,另一个主要部分就是共享内存shared memory 。这一节讨论共享内存(简写shmem )的初始化及其哈希表索引 "ShmemIndex" 的建立,这是共享内存/shmem 管理的基础。

reset_shared () 这个函数里, 计算数据缓冲、xlogclog 、共享进程、子事务、并发控制、轻量级锁、backend 进程等需要的共享内存, 调用 shmget() 函数在堆上分配,接着在头部初始化一个 PGShmemHeader * 类型的 ShmemSegHdr 变量,使其index 成员指向调用hash_create() 创建的可扩展 哈希表索引 "ShmemIndex" shmem 的初始化过程参加《pg 启动过程中的那些事七》,哈希表可参见《pg 中的数据结构一》。

下面是初始化完成并建立了 可扩展 哈希表索引 "ShmemIndex" 后的shmem 内存结构图。


共享内存及其索引 "ShmemIndex" 结构图

 

题外话:pg 的内存管理机制系列文章还没有写到第十一篇,这里用十一是给MemoryContext/AllocSet 的内存管理预留的,这样共享内存管理可以和内存上下文管理分开。

  • 大小: 130.4 KB
0
0
分享到:
评论

相关推荐

    大数据结构课程设计--哈希表实验报告材料

    哈希函数是哈希表的核心组件,用于将关键字(在本实验中为学生姓名)映射到哈希表的索引上。在本实验中,我们使用除留余数法构造哈希函数,即将学生姓名折叠处理后,以余数法将其映射到哈希表的索引上。 哈希函数的...

    C语言实现哈希表(源码+解析)

    创建哈希表函数 createHashTable:动态分配哈希表的内存,并初始化哈希表数组为NULL。 哈希函数 hashCode:根据键计算哈希值,采用简单的求和取模的方式。 插入键值对函数 insert:根据键的哈希值确定存储位置,将...

    哈希表源代码-哈希表模型

    哈希表是一种高效的数据结构,它通过特定的算法——哈希函数,将任意大小的键(key)映射到一个固定大小的数组索引上,从而实现快速的查找、插入和删除操作。在这个"哈希表源代码"压缩包中,我们可以期待找到实现...

    哈希表设计 哈希表的具体实现代码

    - 初始化哈希表,包括分配内存、设置初始容量和负载因子。 - 设计哈希函数,确保关键字能均匀分布。 - 实现冲突解决策略,如链地址法中的链表插入和查找。 - 编写插入、删除和查找操作的代码,考虑冲突和扩容的...

    哈希表的设计与实现(C语言课程设计)

    哈希表的设计与实现(C语言课程设计) 哈希表是一种高效的数据结构,它可以快速地存储、检索和删除数据。在计算机科学与技术领域中,哈希表是一种常用的数据结构。以下是关于哈希表的设计与实现的详细知识点: 一...

    C语言实现简单易用哈希表

    - `创建哈希表`:初始化哈希表,分配内存,设置初始容量。 - `添加键值`:计算键的哈希值,根据哈希值找到对应链表,将键值对插入链表。 - `修改键值`:首先查找键,找到后更新其对应的值。 - `统计键值数量`:...

    哈希表操作(c++版)

    1. **初始化哈希表**: 在C++中,我们通常使用STL中的`std::unordered_set`或`std::unordered_map`来实现哈希表。初始化一个空的哈希表可以使用构造函数,例如: ```cpp std::unordered_set<int> hashSet; std::...

    学生管理哈希表的实现算法

    在学生管理的场景中,我们可以用哈希表来存储学生的信息,例如姓名及其对应的整数,这样可以提高查询效率,尤其是当学生数量较大时。 本问题中提到了两种解决哈希冲突的方法: 1. 线性探测再散列: 这是一种开放...

    哈希表基础及代码

    1. **初始化**(Make Null):初始化哈希表为空表。 2. **哈希函数运算**(H(x)):计算给定关键字`x`的哈希值。 3. **插入元素**(Insert):将元素插入到哈希表中。 4. **查找元素**(Member):判断某个元素是否...

    哈希表操作(c语言版)

    ////采用除留余数法定义哈希表,哈希表长度为10,哈希函数为H(key...////(1)初始化哈希表,置空哈希表 ////(2)在哈希表中查找元素 ////(3)在哈希表中插入元素 ////(4)输出哈希表中所有元素 ////(5)建立Hash表

    哈希表设计 哈希表 哈希表

    哈希表是一种高效的数据结构,它通过特定的函数——...在编程实践中,理解和优化哈希函数、冲突解决策略以及动态扩容机制是提升哈希表性能的关键。通过深入研究哈希表的设计,可以进一步提升我们的编程技能和算法理解。

    利用哈希表进行存储 针对一组数据进行初始化哈希表,可以进行显示哈希表,查找元素,插入元素,删除元素,退出程序操作

    哈希表,又称散列表,是一种高效的数据存储和检索结构,它通过哈希函数将数据的键(key)转换为哈希值,从而快速定位数据。哈希表的设计旨在实现关联数组或映射等抽象数据类型,使得在查找、插入和删除元素时达到较...

    哈希表相关操作实现

    哈希表通过将键(Key)映射到一个索引位置来实现快速访问,这个索引位置是通过哈希函数计算得出的。哈希函数的设计目标是使得键值能均匀地分布在整个索引空间,从而降低冲突的可能性。 哈希表的实现通常包括以下几...

    数据结构实验报告--姓名哈希表的设计与实现.doc

    任务要求:针对姓名信息进行初始化哈希表,可以进行显示哈希表,查找元素。 设计思想:哈希函数用除留余数法构造,用线性探测再散列处理冲突。 设人名为中国人姓名的汉语拼音的形式,有30个待入的人名,取平均查找...

    C++源代码:哈希表算法

    // 构造函数,初始化哈希表大小 HashTable(size_t size) : buckets(size) {} // 插入元素 void insert(const Key& key, const Value& value) { // 计算哈希值 size_t index = hashFunction(key); // 处理...

    哈希表及其应用

    ### 哈希表及其应用 #### 一、定义与基本原理 哈希表是一种高效的数据结构,用于存储键值对数据。它通过一个特定的函数(哈希函数)将键映射到一个固定的范围内,进而定位到具体的存储位置。哈希表的主要优势在于...

    哈希表的建立和查找哈希表的建立和查找哈希表的建立和查找

    建立哈希表的过程主要包括分配内存空间、初始化哈希函数以及选择合适的冲突解决策略。在实际应用中,通常会根据预期的数据规模动态调整哈希表的大小,以确保负载因子(已存元素数量/数组大小)保持在一个合理的范围...

Global site tag (gtag.js) - Google Analytics