可以通过修改页表来移动内存页吗?

2024-03-07

是否有可能(在任何合理的操作系统上,最好是Linux)通过仅修改页表而不实际移动任何数据来交换两个内存页的内容?

动机是密集矩阵转置。如果数据被页面​​大小阻止,则可以在页面内转置数据(适合缓存),然后交换页面以将块移动到最终位置。一个大的矩阵会移动很多页,所以希望刷新 TLB 不会造成麻烦。


#include <stdio.h>
#include <string.h>

#define __USE_GNU
#include <unistd.h>
#include <sys/mman.h>

int main() {
    int PAGE_SIZE = getpagesize();
    char* m = NULL;
    void* temp;

    printf("page size = %d\n", PAGE_SIZE);

    m = (char*)mmap(0, PAGE_SIZE*3, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
    temp = m+PAGE_SIZE*2;

    memset(m, '0', PAGE_SIZE);
    memset(m+PAGE_SIZE, '1', PAGE_SIZE);

    printf("before %c %c\n", m[0], m[PAGE_SIZE]);

    mremap(m + PAGE_SIZE, PAGE_SIZE, PAGE_SIZE, MREMAP_FIXED | MREMAP_MAYMOVE, temp); 
    mremap(m, PAGE_SIZE, PAGE_SIZE, MREMAP_FIXED | MREMAP_MAYMOVE, m+PAGE_SIZE); 
    mremap(temp, PAGE_SIZE, PAGE_SIZE, MREMAP_FIXED | MREMAP_MAYMOVE, m); 


    printf("after %c %c\n", m[0], m[PAGE_SIZE]);
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可以通过修改页表来移动内存页吗? 的相关文章

  • 如何从范围内仅复制Excel VBA中的值? [复制]

    这个问题在这里已经有答案了 我正在尝试使用 vba 宏在 Excel 中将值从表复制到范围 但我不需要表格式 只需要它的值 我怎样才能实现这个目标 这是代码的一部分 Source range Set r Sheets Sheet1 Rang
  • Openpyxl - 复制和粘贴数据时出现空行

    我编写了一个脚本 将数据从一个工作簿复制到另一个工作簿 我唯一的问题是数据之间添加了空单元格 谁能理解为什么 看起来脚本正在跳过不满足 if 语句条件的值 但仍然复制空白单元格 from openpyxl import load workb
  • 可以通过修改页表来移动内存页吗?

    是否有可能 在任何合理的操作系统上 最好是Linux 通过仅修改页表而不实际移动任何数据来交换两个内存页的内容 动机是密集矩阵转置 如果数据被页面 大小阻止 则可以在页面内转置数据 适合缓存 然后交换页面以将块移动到最终位置 一个大的矩阵会
  • Postgres 中未终止的 CSV 引用字段

    我正在尝试使用复制命令将一些数据插入到我的表中 copy otype cstore from tmp otype fdw csv delimiter quote csv 我有这个答案 ERROR unterminated CSV quote
  • 将一个 UIView 的绘制内容复制到另一个 UIView

    我想采用 UITextView 并允许用户在其中输入文本 然后触发将内容复制到石英位图上下文上 有谁知道我如何执行此复制操作 我应该重写drawRect方法并调用 super drawRect 并且then获取生成的上下文并复制它 如果是这
  • 配置 grunt 复制任务以排除文件/文件夹

    我已经安装了 grunt 任务grunt contrib copy 我把它嵌入到我的Gruntfile js并通过加载任务grunt loadNpmTasks grunt contrib copy 目前 我使用以下配置来创建一个包含 js
  • 交换 jQuery 中的两个元素

    我正在尝试使用向上和向下箭头交换两个元素 JSFiddle 解决方案会很棒 My HTML div class item div class content Some text div div class move div class mo
  • 是否有一个标准的算法可以复制?

    我正在使用一个istream iterator
  • 将 java 对象/类从一个类加载器复制到另一个类加载器

    您好 有没有一种方法可以将一个类加载上下文 属性等 从一个类加载器 例如 制作 类点 复制到另一个类加载器 明确表示 例子 我在 CL 1 上有一个对象点 现在在另一个 CL2 上运行 我想在 CL 3 中创建这个对象 一些对象 class
  • 为什么这个语句在 java 中不起作用 x ^= y ^= x ^= y;

    int x 1 int y 2 x y x y 我期望这些值被交换 但它给出 x 0 和 y 1 当我用C语言尝试时 它给出了正确的结果 您的陈述大致相当于此扩展形式 x x y y x x y 与 C 不同 在 Java 中 保证二元运算
  • 在多个小部件上显示相同的 QPushButton

    我有两个小部件 真实的和假的 其中之一有一个 QPushButton 现在我希望在另一个小部件中显示相同的按钮 我该怎么做 我不想创建副本 我希望在不更改父级的情况下同时向另一个小部件显示相同的 QObject 作为示例 在下面我希望 my
  • Java复制数组部分[重复]

    这个问题在这里已经有答案了 有没有一种方法可以复制数组 不是数组列表 的一部分并从中创建一个新数组 Example 1 2 3 4 5 然后您从中创建一个新数组 1 2 3 有没有任何一行 方法可以做到这一点 查看方法Arrays copy
  • 如何使用 javascript 将 svg use 元素插入 svg 组?

    我有一个 svg 文件 其中包含一个具有单行元素的组 我可以利用use元素并在我想要的任何位置制作多个参考副本 但是 我想使用 javascript 来添加和删除use动态元素 有没有办法使用javascript插入svguse我的行元素进
  • 准确理解何时 data.table 是对另一个 data.table 的引用(而不是其副本)

    我在理解传递引用属性时遇到了一些困难data table 有些操作似乎 破坏 了引用 我想确切地了解发生了什么 关于创建一个data table来自另一个data table via lt 然后通过更新新表 原来的表也被改变了 这是预期的
  • 使用 NHibernate 深复制实体

    我目前正在工作中启动一个新的 ASP NET MVC 项目 我们需要生成项目成本估算 我们使用 NHibernate ASP NET MVC 1 0 和 StructureMap 客户希望能够填写有关项目的所有信息 这些信息位于不同的页面中
  • JAVA - 如何将一个对象的属性复制到另一个具有相同属性的对象?

    假设我们有一个对象 A 定义如下 public class ObjectA private Attribute a1 private Attribute a2 private Attribute a3 由于某种原因 我需要创建第二个对象 B
  • 如何在gitlab存储库中下载单个文件夹或文件

    我有一个存储库 在此存储库中 有多个文件夹可用 我只需要此存储库中的一个文件夹 我已经尝试遵循命令 但它不起作用 克隆 有没有办法只克隆 git 存储库子目录 https stackoverflow com questions 600079
  • 在 vba 上将值粘贴到另一个工作簿工作表上时出现问题

    我有以下代码 以便从工作簿复制工作表并将其粘贴到另一个名为 Control de precios 的工作簿的工作表 1 上 Sub createSpreadSheet Set NewBook Workbooks Add With NewBo
  • 远程linux服务器到远程linux服务器大型稀疏文件复制 - 如何?

    我有两台 CentOS 5 4 服务器 每台服务器上都安装了 VMware Server 假设我始终对 vmware 虚拟机使用稀疏文件 将虚拟机文件从一台服务器复制到另一台服务器的最可靠 最快速的方法是什么 虚拟机的文件复制起来很痛苦 因
  • 交换单链表中的节点

    我正在尝试交换两个节点 例如 如果节点是a and b我正在传递指针 a 1 gt next and b 1 gt next这基本上是节点a and b void swap struct stack a struct stack b str

随机推荐

  • 使用 vcpkg 编译 gRPC C++ 示例

    我正在尝试使用与 vcpkg 管理器一起安装的 grpc 来构建和运行 grpc 示例 我通过克隆并查找 grpc 安装了 vcpkg 管理器 如下所示 sudo apt get install y unzip build essentia
  • eclipse appcompat->res->drawable-xxxhdpi 错误

    我刚刚将我的日食更新为SDK 21 我知道每次我创建项目时 Eclipse 也会创建名为appcompat v7 但是appcompat v7显示错误在res drawable xxxhdpi文件夹 这也使我的项目出错 并在控制台显示此警报
  • pip install mod_wsgi,如何设置MOD_WSGI_APACHE_ROOTDIR环境?

    我正在尝试在 Windows 10 中安装 mod wsgi 命令pip install mod wsgi给我错误 RuntimeError No Apache installation can be found Set the MOD W
  • weak_ptr 是如何工作的?

    我明白如何使用weak ptr and shared ptr 我明白如何shared ptr通过计算其对象中的引用数量来工作 如何weak ptr工作 我尝试阅读 boost 源代码 但我对 boost 还不够熟悉 无法理解它使用的所有内容
  • 在调试模式下使用 Intel TBB

    我正在尝试使用英特尔线程构建块调试 C 代码 使用我在此处找到的过程线程构建块中的调试 https stackoverflow com questions 32887113 debugging in threading building b
  • Angular - 如何导航到 .ts 文件中的命名路由器出口

    我有一个侧面导航 在侧面导航中我将其命名为路由器出口 我试图将名为 aside 的路由器出口分配给名为 top words aside 的子组件 但是 它找不到 url 段 报告 component html
  • C++ 友元函数模板重载和 SFINAE 在 clang++、g++、vc++ 中的不同行为(C++14 模式)

    因此 以下代码在 clang 3 8 0 下构建并成功运行 但在 g 6 3 0 和 vc 19 10 24903 0 下均失败 g 和 vc 都抱怨运算符 的重新定义 有谁知道这里哪个编译器有问题 对于无法编译代码的编译器 编译错误的解决
  • 如何找出 PDF 文档中引用了哪些字体以及嵌入了哪些字体

    PDF 文档中的字体存在一些问题 为了解决这个问题 我想检查一下 哪些字体实际上嵌入在pdf文档中 哪些字体只是被引用 有没有一种简单 而且免费 的方法可以做到这一点 pdffonts命令行工具最初来自Xpdf http en wikipe
  • jquery后台只改变一个轴

    我想我的最后一个问题让大家不知所措 所以我会简化一下 我试图仅更改 x 轴的背景位置 默认情况下 如果只定义一个值 则另一个默认为50 所以这个函数 function colorChangePiano var bp background p
  • 链接我的库时未解析的外部符号

    我已经用 VS2010 编译了自己的库文件 lib 但是当我尝试像这样引用它时 pragma comment lib path to lib lib 我不断收到无法解析的外部符号 我做错了什么 到目前为止 pragma comment li
  • 异步odbc好像是同步的

    我正在尝试执行异步数据库查询 但是当我测试我的代码时 它似乎是同步的 我已将问题隔离到我的查询功能 无法弄清楚我做错了什么 我对 aync await 功能还很陌生 所以我可能做了一些愚蠢的事情 这是失败的代码 我正在使用本地安装的 pos
  • 如何解析存储在我的 google 驱动器中但以 html 类型突出的 XML 文件?

    如何解析存储在我的谷歌驱动器中但作为 html 类型脱颖而出的 XML 文件 我在我的 google Drive 云上保存了源 xml 的副本 我可以解析源代码 但无法解析看起来像 html 类型的 xml 副本 我有解析错误 例如 元素类
  • 在同一个 geom_text 上使用 ggrepel 和 Shadowtext

    我有一个情节 用 R 制作ggplot2 这是对一堆文本数据进行奇异值分解的结果 所以我基本上有一个数据集 其中包含一些评论中使用的约 100 个单词和约 10 个评论类别 每个评论都有 2D 坐标 由于文本量太大以及许多重要点之间的距离有
  • Carthage 更新 - 任务失败,退出代码为 65

    我安装了 2 个版本的 Xcode 8 3 2 和 8 2 1 我正在开发一个用 Swift 2 编写的项目 并通过 Carthage 安装了一些第三方 拉分支后我做了carthage update 然后我得到这个错误 carthage u
  • Mongoose TypeError:无法使用“in”运算符在中搜索“_id”

    我有一个 Rails 开发人员正在尝试主干并使用 Backbone js 应用程序书 我的第一个 Backbone Node Mongo 应用程序 所以要温柔 我已经问过类似的问题了 现在已经被困了 12 个小时了 所以我想是时候认输了 错
  • 如何从 AngularJS 中的变量设置 iframe src 属性

    我正在尝试设置src来自变量的 iframe 属性 但我无法让它工作 标记 div class col xs 12 ul class li a href project url a li ul Something wrong div
  • 什么是用户代理样式表?

    我正在 Google Chrome 中处理网页 它可以正确显示以下样式 table display table border collapse separate border spacing 2px border color gray 需要
  • RegEx 自 PHP 7.4 起失败,在 7.3 中工作

    有什么想法为什么这个 preg match 可以在 PHP7 2 上工作但在 7 3 上失败 word umweltfreundilch real life example preg match U aeiouy aeiouy X u wo
  • 使用Retrofit解析本地JSON文件中的文本

    我有一个 JSON 文本文件 res raw 阅读其文本内容后 我想使用 Retrofit 将 JSON 文本解析为 Object 但似乎 Retrofit 只接受服务器中文件的输入 在这种情况下是否可以重用 Retrofit 的 JSON
  • 可以通过修改页表来移动内存页吗?

    是否有可能 在任何合理的操作系统上 最好是Linux 通过仅修改页表而不实际移动任何数据来交换两个内存页的内容 动机是密集矩阵转置 如果数据被页面 大小阻止 则可以在页面内转置数据 适合缓存 然后交换页面以将块移动到最终位置 一个大的矩阵会