dede双语网站/seo教程 seo之家

dede双语网站,seo教程 seo之家,wordpress 二级目录安装,陕西省建设监理协会网站1 使用场景 在Postgresql的内存管理模块中,最常用的aset.c提供的内存池实现,该实现提供了两个非常实用的开关来解决常见的内存越界问题: memdebug.c * About CLOBBER_FREED_MEMORY:** If this symbol is defined, all freed memory is over…

1 使用场景

在Postgresql的内存管理模块中,最常用的aset.c提供的内存池实现,该实现提供了两个非常实用的开关来解决常见的内存越界问题:

memdebug.c

 *	About CLOBBER_FREED_MEMORY:**	If this symbol is defined, all freed memory is overwritten with 0x7F's.*	This is useful for catching places that reference already-freed memory.**	About MEMORY_CONTEXT_CHECKING:**	Since we usually round request sizes up to the next power of 2, there*	is often some unused space immediately after a requested data area.*	Thus, if someone makes the common error of writing past what they've*	requested, the problem is likely to go unnoticed ... until the day when*	there *isn't* any wasted space, perhaps because of different memory*	alignment on a new platform, or some other effect.  To catch this sort*	of problem, the MEMORY_CONTEXT_CHECKING option stores 0x7E just beyond*	the requested space whenever the request is less than the actual chunk*	size, and verifies that the byte is undamaged when the chunk is freed.

简单总结如下:

  • CLOBBER_FREED_MEMORY:
    • 如果定义了这个符号,所有释放的内存都会被覆盖为0x7F。这对于捕捉引用已释放内存的地方非常有用。
  • MEMORY_CONTEXT_CHECKING:
    • 由于我们通常将请求的大小舍入到下一个2的幂,所以在请求的数据区域之后通常会有一些未使用的空间。因此,如果有人犯了常见的错误,超出了他们请求的范围,问题可能会被忽视…直到更换平台后,没有这种空间未使用空间,导致内存越界使用的问题才被发现。

其实这两个宏在打开USE_ASSERT_CHECKING的使用就默认会生效。所以建议configure时记得打开enable_cassert。

/** Define this to cause pfree()'d memory to be cleared immediately, to* facilitate catching bugs that refer to already-freed values.* Right now, this gets defined automatically if --enable-cassert.*/
#ifdef USE_ASSERT_CHECKING
#define CLOBBER_FREED_MEMORY
#endif/** Define this to check memory allocation errors (scribbling on more* bytes than were allocated).  Right now, this gets defined* automatically if --enable-cassert or USE_VALGRIND.*/
#if defined(USE_ASSERT_CHECKING) || defined(USE_VALGRIND)
#define MEMORY_CONTEXT_CHECKING
#endif

2 原理

2.1 MEMORY_CONTEXT_CHECKING

下面讲讲这两宏的原理,也比较简单:

正常我们申请内存都是会向上对齐到2的幂上,比如申请5个字节实际上会分配8个字节出来,但是你只应该使用5个字节。
在这里插入图片描述
但是如果你内存越界访问到第六个字节后,实际上是不会发生任何破坏的,因为这第六个字节也没有人会用,释放时也不可能发现。这就造成了隐患(这类问题都比较难差会有奇怪的逻辑报错)。

如果打开MEMORY_CONTEXT_CHECKING宏后:

在这里插入图片描述

2.2 CLOBBER_FREED_MEMORY

还有use after free的场景,因为在pfree时,内存块中的内容不会立即被覆盖或重写,很可能发生上面已经free了,但后面还能正常用的场景,在某些串行逻辑下,貌似一直都不会出现问题,这也埋下了隐患(这类问题都比较难差会有奇怪的逻辑报错)。

打开CLOBBER_FREED_MEMORY后,释放时会调用wipe_mem将内存覆盖成0X7F

static inline void
wipe_mem(void *ptr, size_t size)
{VALGRIND_MAKE_MEM_UNDEFINED(ptr, size);memset(ptr, 0x7F, size);VALGRIND_MAKE_MEM_NOACCESS(ptr, size);
}

后面aset不会对0x7F做任何检查逻辑,因为没准你的数据就全是0x7F。但是memset后,肯定会将pfree的地址的数据立即覆盖掉,让后面使用者能尽早发现问题(看到一堆0x7F就知道是用了free后的地址了)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/80390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC专栏6——通过阿里云与AutoDL快速拉起Stable Diffusion和EasyPhoto

AIGC专栏6——通过阿里云与AutoDL快速拉起Stable Diffusion和EasyPhoto 学习前言Aliyun DSW快速拉起(新用户有三个月免费时间)1、拉起DSW2、运行Notebook3、一些小bug AutoDL快速拉起1、拉起AutoDL2、运行Notebook 学习前言 快速拉起AIGC服务 对 用户体…

Debian 12快速安装图解

文章目录 Debian 12安装图解创建虚拟机安装系统登录并用光盘离线安装sudo、curl解决Linux下sudo更改文件权限报错保存快照debain添加在线源(配置清华源)参考 Debian 12安装图解 Debian选择CD安装非常慢,本次安装选择DVD离线安装。 下载 https://www.debian.org/CD…

大范围XSS扫描工具:XSS-Freak,BurpSuite随机用户代理,Hades 静态代码审核系统

大范围XSS扫描工具:XSS-Freak,BurpSuite随机用户代理,Hades 静态代码审核系统。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习…

【AIGC】Stable Diffusion Prompt 每日一练0916

一、前言 1.1 写在前面 本文是一个系列,有点类似随笔,每天一次更新,重点就Stable Diffusion Prompt进行专项训练,本文是第022篇《Stable Diffusion Prompt 每日一练0916》。上一篇《Stable Diffusion Prompt 每日一练0915》 1.…

ES6中新增加的Proxy对象及其使用方式

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Proxy对象的基本概念Proxy对象的主要陷阱(Traps) ⭐ 使用Proxy对象⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来…

开源项目-SeaTunnel-UI数据集成系统

哈喽,大家好,今天给大家带来一个开源项目-SeaTunnel-UI数据集成系统 系统主要有任务配置,任务实例,数据源,虚拟表,用户管理等功能 登录 数据源 mysql数据源配置参数说明 kafka参数配置 mysqlcdc配置参数说明 虚拟表

【自学开发之旅】Flask-标准化返回-连接数据库-分表-orm-migrate-增删改查(三)

业务逻辑不能用http状态码判断,应该有自己的逻辑判断。想要前端需要判断(好多if…else),所以需要标准化,标准化返回。 json标准化返回: 最外面:data,message,code三个字段。 data:返回的数据 co…

索引-动图演示存储过程

索引 二叉树存储过程演示 BThree存储过程 sql二级索引搜索过程 Id是唯一键,聚集索引 只存在一个 Name是二级索引 可以存在多个 第一种效率更高,不需要回表

Java + Selenium + Appium自动化测试

一、启动测试机或者Android模拟器(Genymotion俗称世界上最快的模拟器,可自行百度安装) 二、启动Appium(Appium环境安装可自行百度) 三、安装应用到Genymotion上,如下图我安装一个计算机的小应用&#xff0c…

webpack:css-loader和style-loader关系

测试 当我们webpack 的 rules 啥都没配置的时候 const path require(path);module.exports {entry: ./src/index.js,output: {filename: index.js,path: path.resolve(__dirname, dist)},module: {rules: []} };我们在 js 中导入了 css,发现报错,因为…

Powdersigner + PostgreSql 同步表结构到pg数据库

要用Powdersigner同步表结构到PostgreSql数据库, Powdersigner 版本是 16.5,当前模型是mysql的 1,修改当前模型内容为postgresql的 Database --> Change Current DBMS 选择PostgreSQL 最大版本的(因为Powdersigner内置版本一…

错误: 找不到或无法加载主类 Main

在用git回退到上个版本后发现,无法运行项目并提示 错误: 找不到或无法加载主类 Main 可以看到Main前面的图标也是号。 查了半天没有解决,问了个大佬,大佬一下就解决掉了,本文记录下解决过程。 错误原因是编辑器无法找到代码位置&…

Java面向对象编程

设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度() A. O(log2n) B. O(1) C. O(n2) D. O(n) 答案:D 一个栈的初始状态为空。首先将元素5,4,3…

DP读书:《openEuler操作系统》(二)操作系统的发展史

操作系统的发展历史 操作系统的发展历史手工操作时代批处理系统多道程序系统分时操作系统CTSSMULTICS的历史UNIX和Linux的历史Debian系列Red Hat系列 DOS和Windows的历史DOS的历史:Windows的历史: Android和iOS的历史Android:iOS:…

InfiniBand vs 光纤通道,存储协议的选择

数字时代,数据量爆发增长,企业越来越迫切地追求高吞吐量、低延迟和更高性能的网络基础设施,存储协议的选择变得愈发至关重要。在众多存储协议中,InfiniBand和光纤通道备受关注。本文旨在深入探讨InfiniBand和光纤通道作为存储协议…

React入门

一、react开始 1、react是什么 用于构建用户界面的JavaScript库 操作DOM呈现页面 (发送请求获取数据和处理数据不由react处理)fessbook开发 2、为什么要学 原生js操作DOM繁琐、效率低 使用原生js直接操作DOM,浏览器会进行大量重绘重排 原…

二叉树与堆

文章目录 1.树的概念及结构(先导知识,了解可跳过)1.1 什么是树1.2 树的相关概念1.3 普通树的存储结构结点的定义 2.二叉树2.1 概念2.2 现实中的二叉树2.3 特殊的二叉树2.4 二叉树的性质(笔试选择题常见)2.5 二叉树的存…

解决 Cannot read property ‘key‘ of undefined

目录 问题解决1解决2最终 问题 现场环境分页查询某些条件项查询时,分页接口获取成功但是数据不渲染,页面像是卡住了: 报错 Cannot read property key of undefined 解决1 有人说 使用的el-pagination在格式化代码的时候layout属性的参数会多加…

C# 模拟button按钮批量锁住与打开

项目需求: 当winform界面上存在多个按钮时(大于2个),用户需求为当点击其中一个按钮后,其它按钮全部为禁用,当被点击的按钮后台逻辑执行完成后,再释放所有按钮。用户可再次点击其它按钮。 此案…

常用设计模式—

一、设计模式简介 23种设计模式 1.1、设计模式七大原则 1.开闭原则 对扩展开放,对修改关闭。 2.依赖倒置原则(面向接口编程) 依赖关系通过接口、抽象类。 3.单一职责原则 一个类、接口、方法只负责一项职责或职能。 4.接口隔离原则 客…