应用什么算法来连续重新分配小内存块?

2024-03-11

在 C 程序中,我面临需要拥有大量内存块的事务,我需要知道是否有一种算法或最佳实践技术用于处理所有这些 malloc/free,我使用数组来存储这些内存块,但在某些情况下指出数组本身已满并且重新分配数组只会更加浪费,处理这个问题的优雅方法是什么?


在这种情况下最好的算法是空闲列表 https://en.wikipedia.org/wiki/Free_list分配器+二叉搜索树。

您向系统请求一个大内存块,然后从该块中分配固定大小的内存块。当块已满时,您将分配另一个块,并将它们链接到红黑或 AVL 二叉搜索区间树(否则在期间搜索块)free通过迭代块列表成为瓶颈)

同时,多线程和线程同步变得重要。如果您只使用互斥锁或简单的自旋锁,您会发现 libc malloc 的工作速度比自定义内存分配器快得多。解决方案可以在危险指针 https://en.wikipedia.org/wiki/Hazard_pointer,即每个线程都有自己的内存分配器(或每个 CPU 核心一个分配器)。这将增加另一个问题 - 当一个线程分配内存而另一个线程释放它时,这将需要在 free 函数期间搜索确切的分配器,并严格锁定或无锁数据结构。

最好的选择 - 你可以使用jemalloc http://jemalloc.net/, tcmalloc http://goog-perftools.sourceforge.net/doc/tcmalloc.html或任何其他通用建议的快速内存分配器来完全或部分替换您的 libc (即 pdmalloc)默认分配器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用什么算法来连续重新分配小内存块? 的相关文章

  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop
  • 没有 OAuth 的 Spring Security JWT

    最近我开始学习如何使用oauth 2 0 jwt配置spring boot 我有一个问题 是否可以使用spring boot security jwt避免oauth 2 0 是的 可以使用JWT无需使用标准化的功能OAuth 2 0 flo
  • 如何为 Windows toast 注册协议?

    如何注册 Windows toast 协议 样本中来自https blogs msdn microsoft com tiles and toasts 2015 07 02 adaptive and interactive toast not
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • Android ScrollView fillViewport 不工作

    我有一个简单的布局 名称位于顶部 按钮位于屏幕底部 或者超出该按钮 以防我添加更多项目 所以我使用带有 LinearLayout 的 ScrollView 如下所示
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d
  • 在 Android 中使用 iText 将图像添加到特定位置

    我想使用 Android 中的 iText 将图像添加到 PDF 文件中的特定位置 这是一个可填写的表单 我添加了作为图像占位符的文本框 我想要做的就是像这样获取该文本框和图像 public class FormFill public st
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • NGinx $proxy_add_x_forwarded_for 和 real_ip_header

    我在 NGinx 下有一个 web 应用程序和另一个前端负载均衡器 如下所示 x x x x IP 地址 客户端 a a a a gt LB b b b b gt NGX c c c c gt WEBAPP d d d d 这是我的 NGi
  • Typescript 函数接口重载

    我有以下代码 interface MySecondInterface a type A interface MyInterface val1 string val2 string MySecondInterface a
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • 使用泛型全面实现特征

    我正在通过实现矩阵数学来练习 Rust 但遇到了一些障碍 我定义了我认为与矩阵相关的特征 trait Matrix
  • Android:如何检测手机设置中的语言已更改

    我如何检测我的手机语言是否已更改 例如 Facebook 应用程序将向我们宣布 please wait we preparing your language i used myString Locale getDefault getDisp
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • android ndk 硬件调试内存

    背景 我对 C 很有经验 对 Android 和 Java 还很陌生 但这是编程的环境问题 我已经用 ANSI C 开发了一个管理应用程序 可以移植到任何操作系统 只需在依赖于操作系统的代码中添加 UI 即可 它使用相当多的内存 特别是对于

随机推荐

  • 如何从字符串中删除变音符号(变音符号)?

    如何转换字符串 例如P li lu ou k k p l belsk dy into Prilis zlutoucky kun upel dabelske ody 源字符串采用 Unicode 因此原则上应该可以使用规范化 分解来分隔元音变
  • 如何查看 SQL 2008 锁和阻塞表

    在我的应用程序的 ASP NET 执行期间 SQL 2008 Express 似乎持有一些锁定 我得到 Timeout expired The timeout period elapsed prior to completion of 操作
  • 为什么 Java 类型擦除没有阻止此代码编译

    我有一个类定义了以下两种方法 public Map
  • 如何让 scalac 告诉我是否有未使用的变量?

    我刚刚注意到代码中的一个错误 我创建了一个新变量 但后来未能实际使用它 我以为 scalac 会告诉我我的新变量未被使用 但情况似乎并非如此 在进行少量谷歌搜索 手册页后 我找不到任何有关启用警告的信息 我该怎么做才能启用此类警告 这个东西
  • 使用Javascript读取外部文件

    我有一个可变长度名称的外部文本文件配置文件 txt包含以下格式的信息 Jason Red Tyrannosaurus Zack Black Mastodon Billy Blue Triceratops Trini Yellow Griff
  • 如何手动刷新升压日志?

    我正在使用 boost 1 54 0 中的 Boost Log 看看它是否适合我的应用程序 一般来说 我的缓冲没有问题 所以我不想打开 auto flush 或任何东西 但我注意到在我调用之前记录的消息fork 是重复的 我想知道是否是因为
  • 如何使用 Pyomo 制作指标函数?

    我正在寻找在 Pyomo 中创建一个简单的指示变量 假设我有一个变量 x 如果 x gt 0 则该指示函数将取值 1 否则取 0 我尝试这样做的方法如下 model ConcreteModel model A Set initialize
  • 自定义智能感知自动完成

    是否可以添加自定义智能感知来自动完成我的字符串 Example 我输入 艾达 它将弹出智能感知 gt Adapt gt Adapter 我正在使用一种新语言 需要向 Visual Studio 2015 的库添加更多功能 使用我的关键字数据
  • 免费升级为付费 Android 应用,不留两个图标

    我有一个Android应用程序 有免费和付费版本 其中免费版本有时间限制 之后它将用户重定向到市场购买付费版本 这两个版本具有不同的包名称 并作为单独的应用程序提交到市场 但是 当用户购买付费版本时 这不会取代免费版本 他们会同时安装两个版
  • 使用 Glide 预加载多个图像

    我们正在努力预加载图像到缓存内存中以便稍后加载它们 图像位于资产文件夹申请的 我们尝试过的 Glide with this load pictureUri diskCacheStrategy DiskCacheStrategy ALL Gl
  • 获取 Spring Security 中所有已登录的用户

    我想获取当前登录我的应用程序的所有用户的列表 我知道 我应该注射SessionRegistry在我的代码中调用getAllPrincipals 方法 不幸的是 我总是得到空列表 看起来SessionRegistry没有填充 我不知道如何制作
  • 那么 ASP.NET MVC 3 中是否内置了 [Email] 属性?

    The Email 属性将像在未来一样内置到 ASP NET MVC 3 中吗 那么现在可以用还是不能用呢 我想这是一个相当愚蠢的问题 但我花了一些时间谷歌搜索并没有找到任何正常的答案 电子邮件正则表达式 a z d u00A0 uD7FF
  • Fancybox 导航箭头未显示

    我是 jquery 的新手 所有动画 例如过渡和速度 都工作正常 但是 showNavArrows 和 循环 不起作用 这是代码 document ready function a single image fancybox transit
  • HTTP 状态 500 - java.lang.NoClassDefFoundError:无法初始化类 org.apache.jasper.el.E​​LContextImpl [重复]

    这个问题在这里已经有答案了 当我尝试在 myeclipse 上浏览 localhost 8080 时 出现以下错误 type Exception report message java lang NoClassDefFoundError C
  • 合并特定列上的两个大型数据框并显示进度条

    我有两个大型数据集 一个 2 6 GB 另一个 1GB 我已经设法将它们作为数据帧读取 接下来 我想要创建一个新的 DataFrame 在其中我想要将两个数据集的唯一 ID 进行匹配 并丢弃两个数据集之间没有匹配的 ID 的行 我尝试过合并
  • 如何使用 JSPM 导入带有 Typescript 声明的外部 NPM 模块

    test module 是用 Typescript 编写的外部模块 带有 index d ts 定义文件 它在 package json 中有 tsd tsc 的属性 typings dist index d ts 打字稿 定义 dist
  • Xcode gRPC-Core 错误:找不到“openssl_grpc/ssl.h”文件

    Xcode 11 2 1 Mac 10 15 2 测试版 Pod 版本 1 8 4 我试图Archive我的 Mac 应用程序在 Xcode 上 然后在我的 Xcode 中出现以下错误 我可以毫无问题地编译我的应用程序 只是无法存档 我想问
  • 在主模块中找不到库模块中的包

    我有一个从 Eclipse 导入到 Android Studio 的项目 在 Eclipse 中一切都运行良好 它包含一个主模块 Eclipse 中的项目 它使用库模块 Eclipse 中的库项目 中的包 由于迁移进展不顺利 我手动创建了一
  • package-info.java 包注释影响所有类,包括子包中的类

    我想在我的所有课程上应用注释 并且我正在尝试最好的方法来做到这一点 到目前为止 我坚持使用可以注释整个包的 package info java 文件 但不能注释子包中包含的类文件 除了在我的项目中添加 100 个仅包含单个注释的相同 pac
  • 应用什么算法来连续重新分配小内存块?

    在 C 程序中 我面临需要拥有大量内存块的事务 我需要知道是否有一种算法或最佳实践技术用于处理所有这些 malloc free 我使用数组来存储这些内存块 但在某些情况下指出数组本身已满并且重新分配数组只会更加浪费 处理这个问题的优雅方法是