内存分配和调试机制

Linux内存管理之malloc、vmalloc、kmalloc Linux内存管理之malloc、vmalloc、kmalloc, 区别,相似之处 立即下载
 
内存分配方式和调试机制


M内存分配


内存分配函数

MFCWin32或者C语言的内存分配API,有四种内存分配API可供使用。


Win32的堆分配函数

每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面。DLL创建的私有堆必定在调用DLL的进程的地址空间内,只能被调用进程访问。

HeapCreate用来创建堆;HeapAlloc用来从堆中分配一定数量的空间,HeapAlloc分配的内存是不能移动的;HeapSize可以确定从堆中分配的空间的大小;HeapFree用来释放从堆中分配的空间;HeapDestroy销毁创建的堆。


Windows传统的全局或者局部内存分配函数

由于Win32采用平面内存结构模式,Win32下的全局和局部内存函数除了名字不同外,其他完全相同。任一函数都可以用来分配任意大小的内存(仅仅受可用物理内存的限制)。用法可以和Win16下基本一样。

Win32下保留这类函数保证了和Win16的兼容。


C语言的标准内存分配函数

C语言的标准内存分配函数包括以下函数:

malloc,calloc,realloc,free,等。

这些函数最后都映射成堆API函数,所以,malloc分配的内存是不能移动的。这些函数的调式版本为

malloc_dbg,calloc_dbg,realloc_dbg,free_dbg,等。


Win32的虚拟内存分配函数

虚拟内存API是其他API的基础。虚拟内存API以页为最小分配单位,X86上页长度为4KB,可以用GetSystemInfo函数提取页长度。虚拟内存分配函数包括以下函数:


LPVOID VirtualAlloc(LPVOID lpvAddress,

DWORD cbSize,

DWORD fdwAllocationType,

DWORD fdwProtect);

该函数用来分配一定范围的虚拟页。参数1指定起始地址;参数2指定分配内存的长度;参数3指定分配方式,取值MEM_COMMINT或者MEM_RESERVE;参数4指定控制访问本次分配的内存的标识,取值为PAGE_READONLY、PAGE_READWRITE或者PAGE_NOACCESS。


LPVOID VirtualAllocEx(HANDLE process,

LPVOID lpvAddress,

DWORD cbSize,

DWORD fdwAllocationType,

DWORD fdwProtect);

该函数功能类似于VirtualAlloc,但是允许指定进程process。VirtaulFree、VirtualProtect、VirtualQuery都有对应的扩展函数。


BOOL VirtualFree(LPVOID lpvAddress,

DWORD dwSize,

DWORD dwFreeType);

该函数用来回收或者释放分配的虚拟内存。参数1指定希望回收或者释放内存的基地址;如果是回收,参数2可以指向虚拟地址范围内的任何地方,如果是释放,参数2必须是VirtualAlloc返回的地址;参数3指定是否释放或者回收内存,取值为MEM_DECOMMINT或者MEM_RELEASE。


BOOL VirtualProtect(LPVOID lpvAddress,

DWORD cbSize,

DWORD fdwNewProtect,

PDWORD pfdwOldProtect);

该函数用来把已经分配的页改变成保护页。参数1指定分配页的基地址;参数2指定保护页的长度;参数3指定页的保护属性,取值PAGE_READ、PAGE_WRITE、PAGE_READWRITE等等;参数4用来返回原来的保护属性。


DWORD VirtualQuery(LPCVOID lpAddress,

PMEMORY_BASIC_INFORMATION lpBuffer,

DWORD dwLength

);

该函数用来查询内存中指定页的特性。参数1指向希望查询的虚拟地址;参数2是指向内存基本信息结构的指针;参数3指定查询的长度。



BOOL VirtualLock(LPVOID lpAddress,DWORD dwSize);

该函数用来锁定内存,锁定的内存页不能交换到页文件。参数1指定要锁定内存的起始地址;参数2指定锁定的长度。


BOOL VirtualUnLock(LPVOID lpAddress,DWORD dwSize);

参数1指定要解锁的内存的起始地址;参数2指定要解锁的内存的长度。
申请内存区别new malloc HeapAlloc VirtualAlloc 申请内存区别new malloc HeapAlloc VirtualAlloc,很多时候内存分配影响着程序性能,本例通过源代码显示这几个函数的本质。 立即下载

相关推荐

IC面试常考题 Verilog三分频电路设计(占空比50%,三分之一,三分之二)

实现三分频电路最简单的是: 利用计数器实现。 时序图分析(本人比较懒,平常科研忙,所以直接手画时序图了,懒得用软件画了): 直接上图分析:利用计数器每隔三个周期信号翻转一次,同时在不同的计数下翻转得到的同步信号 clk_1和clk_2,再利用异或即可实现出一个不同占空比的三分频信号(同样的方法也可扩展到其他奇数分频设计中)。 例如占空比50%: module Div_three( input clk, input rst_n, output div_three ); reg

qq_41884662的博客 1万+

C++第3课:C++内存泄露检测原理及案例实战

C++第3课:C++内存泄露检测原理及案例实战本课程侧重于C++的内存管理及泄露检测。我将带领大家学习OS的内存管理机制、C++的堆和栈、内存泄露及检测等。本课程具体的内容主要包括C++内存泄露案例、VS2015内存泄露检测、野指针、VirtualAlloc/HeapAlloc/malloc/new的区别、C++堆和栈的内存管理、栈简介、堆简介、堆与栈区别、栈的内存分配、Windows的虚拟内存技术、Windows的内存映射文件技术、Linux的虚拟内存技术、Linux的Valgrind内存泄露检测、Windows的VLD内存泄露检测、C++内存泄露检测方式之对象计数、C++内存泄露检测方式之重载new和delete、C++内存泄露检测方式之智能指针等。 

基于Python的虚拟货币社区情绪分析与市场价格预测爬虫实现

本文探讨了如何利用Python爬虫技术获取虚拟货币社区数据,并通过情感分析预测市场价格走势。我们将使用最新的异步爬虫框架、自然语言处理技术和机器学习模型,构建一个完整的社区情绪分析系统。本文提供了详细的代码实现和理论解释,适合作为毕业设计参考。关键词:Python爬虫、虚拟货币、情感分析、价格预测、异步爬虫、机器学习爬虫框架aiohttp和httpx用于异步HTTP请求HTML解析和parsel数据存储MongoDB和Pandas用于数据处理自然语言处理库和VADER情感分析工具机器学习和。

2201_76125261的博客 524

Windows系统上的VirtualAlloc, HeapAlloc和malloc,new的区别

Windows系统上的VirtualAlloc, HeapAlloc和malloc,new的区别。

kuangben2000的博客 1406

HTML5+CSS3+JS小实例:焦点图波浪切换动画特效

实例:焦点图波浪切换动画特效。字体图标库:Font Awesome。技术栈:HTML+CSS+JS。

艾恩小灰灰的博客 909

Pinocchio 快速详细入门教程 —— 开源机器人运动学动力学库

本文介绍了机器人学中的数字机器人学、正逆运动学、动力学仿真与控制、最优控制等核心主题,以及Pinocchio库的应用。内容包括: 数字机器人学:通过UR5机器人模型演示了构型空间采样、碰撞检测、路径规划等基础操作,使用优化方法在约束条件下寻找有效构型。 运动学:详细讲解了二维和三维机器人的正运动学(构型到末端位置)和逆运动学(目标位置到构型),包括串联机械臂和并联机器人的处理。 动力学与控制:介绍了动力学仿真(如自由落体、摩擦效应)、PD控制、计算扭矩控制,以及接触仿真(碰撞检测与处理)。 最优控制:以独轮

机器人控制与仿真应用 2883

VirtualAlloc|VirtualFree|VirtualCopy |VirtualProtect |VirtualQuery - WINDOWS API 第七弹 为进程申请虚拟内存

我们知道计算机为了更加高效的使用物理内存,设计出了虚拟内存给进程使用,进程需要运行的话只需要将虚拟内存映射到物理内存即可,当然这也属于非常繁琐的计算机科学了,我们一步一步揭开这个api的神秘面纱吧。vitualalloc系列的函数实现了windows进程虚拟内存向物理内存的转换,是比较底层和重要的api。还有一些,这些大家自己去找吧。夜已深,好梦。

Bobowen的博客 3145

【WRF-GHG 教程第一期】概述(Overview)

概述(Overview)

WW、forever的博客 511

python的decorator@

decorator是python的一个特性。 decorator可以是函数也可以是一个类。   decorator@的用处: 1)在函数开始前做一些初始工作,例如参数校验,调用统计等。 2)在函数结束后做一些收尾工作。 3)类似C++模板的功能。   decorator是函数时, def decorator(fun): def call(*args, **kwarg...

Think On Think 140

【Qt图书管理系统】5.完整版源码及下载地址

Qt图书管理系统完整源码下载。

小鱼酱的博客 7003

国债期货的日线趋势跟踪策略实现(基于backtrader框架)

通过backtrader框架,我们可以轻松地实现国债期货的日线趋势跟踪策略,并进行回测和验证。通过这种策略,我们可以尝试捕捉国债期货价格的短期趋势,并根据趋势的方向进行交易决策。backtrader提供了许多内置的指标、订单类型和其他功能,可以帮助你进一步优化和改进你的策略。它提供了丰富的工具和功能,使我们能够快速实现和验证我们的交易想法。方法中,我们根据当前价格和前一天的价格判断趋势的方向,并根据趋势的变化进行买入或卖出操作。然后,我们设置了初始资金和交易手续费,并将我们定义的策略。来跟踪每日的收盘价。

NisyPhilosophy的博客 404

VirtualAlloc函数使用总结

如果我们的程序需要动态内存的话,则迟早会调用Win32函数VirtualAlloc。但是程序也可以不调用VirtualAlloc,而是直接调用Windows堆函数或者CRT堆函数。不过,知道VirtualAlloc如何工作,可以帮助我们更好地理解这些调用函数。     首先,必须知道保留(Reserved)内存和占用(Committed)内存的含义。当内存放保留时,一段连续虚拟地址空间被留出。例

2万+

记录一次Spring Framework 漏洞修复的过程

摘要:针对Spring Boot 2.6.13项目在阿里云漏洞扫描中发现的Spring Framework目录遍历漏洞(CVE-2024-38819),首先分析了漏洞成因,确认5.3.23版本存在风险。解决方案包括升级Spring Boot至2.7.18(对应Spring Framework 5.3.41)或6.0+版本,但后者需JDK17支持。临时方案通过配置HttpFirewall限制特殊字符,最终借助阿里云防护服务暂时解决问题。建议长期解决方案仍需升级至安全版本(Spring Boot 6.1.14或

极客栈 1492

VirtualAlloc的使用

在应用程序中使用虚拟内存(VirtualAlloc VirtualFree) 本文转载以下博客,百度百科,cpp文档 https://blog.youkuaiyun.com/baidu_25539425/article/details/78764156 https://blog.youkuaiyun.com/u012372584/article/details/79621538 https://www.cnblo...

编程爱好者的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VirtualAllocAPi逆向笔记

Windows API逆向

qq_43147121的博客 1527

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LocalAlloc,VirtualAlloc,malloc,new的异同

原文转载自:http://www.cnblogs.com/Clingingboy/archive/2013/03/07/2947934.html,感谢原作者。 首先明白几个概念:虚拟内存是从硬盘置换出来的,堆本身就是内存,程序运行时,可用内存=物理内存+虚拟内存。虚拟内存一般用文件来保存数据,虚拟内存的出现主要是因为以前内存不够(16M的内存刚出来的时候可是天价啊),磁盘相对便宜一些,所以聪明的

https://github.com/JelinYao 808

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

9.4 RetLibc实战之利用VirtualAlloc

Ret2LIbc

qq_55202378的博客 934

windows的malloc到virtualAlloc的调用

windows的malloc到virtualAlloc调用 ​ 先介绍下基本知识 Win32 内存结构 首先要搞清楚【虚拟内存、交换文件、页面文件、RAM、物理存储、虚拟地址空间】这几个概念! 虚拟内存是操作系统的内存管理方式,对上层应用屏蔽了页面文件与RAM的区别与调度方式。先看看操作系统,再来说吧! Windows操作系统中的内存结构 ​ 在没有充分的理解函数集合是如何工作的以及它们各自是如何影响操作系统的情况下,在你的应用程序中确定用于管理内存的函数或函数集合是很困难的。下面重点介绍虚拟内存(Vir

qq_18059143的博客 1534

malloc,new,heapAlloc,virtualAlloc

malloc,new,heapAlloc,virtualAlloc (1) VirtualAlloc PVOID VirtualAlloc(PVOID pvAddress, SIZE_T dwSize, DWORD fdwAllocationType, DWORD fdwProtect) VirtualAlloc是Windows提供的API,通常用来分配大块的内存。例如如

zbird1988的专栏 812

内存分配:malloc, new, HeapAlloc, VirtualAlloc

参考一: malloc, VirtualAlloc,HeapAlloc,New 在进行Windows的学习过程中,经常看到不同的内存分配方式,例如VirtualAlloc, HeapAlloc, malloc和new。它们之间存在一些差异。 (1) VirtualAlloc PVOID VirtualAlloc(PVOID pvAddress, SIZE_T dwSize, D

人生代码,代码人生。。。 3034

谈谈Windows的内存分配

简单谈谈Windows的堆管理,以及我们的C++程序在分配内存的时候,是如何实现的

Cantaloupe77的博客 2201

使用windows内存-VirtualAlloc

内存管理机制--虚拟内存 (VM) ·        虚拟内存使用场合 虚拟内存最适合用来管理大型对象或数据结构。比如说,电子表格程序,有很多单元格,但是也许大多数的单元格是没有数据的,用不着分配空间。也许,你会想到用动态链表,但是访问又没有数组快。定义二维数组,就会浪费很多空间。 它的优点是同时具有数组的快速和链表的小空间的优点。   ·        分配虚拟内存

Barry的博客 1万+

内存分配详解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc

很多地方都会使用内存,内存使用过程中操作不当就容易崩溃,无法运行程序,上网Google学习一下,了解整理下他们之间的区别以及使用 ,获益匪浅 0x01 各自的定义和理解   (1)先看GlobalAlloc()     GlobalAlloc()主要用于Win32应用程序实现从全局堆中分配出内存供2017-03-05程序使用,是16位WINDOWS程序使用的API,对应于系统的全局栈,返回...

556

Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc)

Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc)

whl0071的专栏 1923
上一篇: VC里在工具栏添加COMBOBOX的方法
下一篇: 判断系统是否为XP的小函数
appleboyecho
博客等级 码龄21年 0粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值