C语言 内存操作函数 +内存分区

内存操作函数

memset()
//memset 函数将指定内存区域 ptr 开始的 num 个字节设置为 value。
void *memset(void *ptr, int value, size_t num);参数:ptr:指向要填充的内存区域的指针。value:要填充的值,以整数形式传递。num:要填充的字节数。
memcpy()
//memcpy 函数会将源内存区域 src 的前 n 个字节的内容复制到目标内存区域 dest 中。
void *memcpy(void *dest, const void *src, size_t n);
参数:dest:指向目标内存区域的指针,也就是要将源数据复制到的地方。src:指向源内存区域的指针,也就是要复制的数据来源。n:要复制的字节数。

为了防止内存重叠导致不确定的结果,建议源内存区域和目标内存区域不能重叠。

memmove()
//memmove 函数会将源内存区域 src 的内容移动到目标内存区域 dest 中,并且可以处理内存重叠的情况。
void *memmove(void *dest, const void *src, size_t n);
参数:dest:指向目标内存区域的指针,也就是要将数据移动到的地方。src:指向源内存区域的指针,也就是要移动的数据来源。n:要移动的字节数。

memmove 函数能够处理源内存区域和目标内存区域重叠的情况,以确保正确的数据移动。

memcmp()
//memcmp 函数会比较 ptr1 和 ptr2 指向的内存区域的前 num 个字节的内容,并根据比较结果返回一个整数值。
int memcmp(const void *ptr1, const void *ptr2, size_t num);
参数:ptr1:指向第一个内存区域的指针。ptr2:指向第二个内存区域的指针。num:要比较的字节数。
返回值:
如果 ptr1 的内容小于 ptr2 的内容,返回一个负整数。
如果 ptr1 的内容等于 ptr2 的内容,返回 0。
如果 ptr1 的内容大于 ptr2 的内容,返回一个正整数。

memcmp 函数是以字节为单位进行比较的,因此适用于比较任意类型的数据。但是,当比较字符串时,建议使用字符串比较函数 strcmp 来代替 memcmp,因为 strcmp 能够根据字符串的终止符’\0’自动确定比较的长度,而不需要显式指定比较的字节数。

堆内存的分配和释放 函数

malloc
//分配一块新的内存,不会初始化。
void* malloc(size_t size);
参数:size 表示欲分配的内存大小,以字节为单位。
返回值:成功,返回一个指向分配内存的指针失败,则返回 NULL

在实际开发中,使用 malloc 分配动态内存可以灵活地管理和利用内存资源,但也需要注意内存的释放和错误处理,以确保程序的正确性和健壮性。

calloc
//与 malloc 类似,用于分配指定数量的内存块。不同之处在于,calloc 还会将分配的内存块初始化为0。
void* calloc(size_t num, size_t size);
参数:num 表示欲分配的内存块数目size 表示每个内存块的大小(以字节为单位)
返回值:成功,返回一个指向分配内存的指针失败,则返回 NULL

使用 calloc 可以方便地分配内存,并初始化为零。在需要使用零初始化的情况下,calloc 是一个很有用的函数。

realloc
//用于重新分配已分配内存的大小
void* realloc(void* ptr, size_t size);
参数:ptr 是之前使用 malloc、calloc 或 realloc 函数分配的内存块的指针size 表示需要重新分配的内存大小(以字节为单位)
返回值:成功,返回一个指向重新分配后内存的指针失败,返回 NULL。
注意:	使用 realloc 重新分配内存后,返回的指针可能是原有内存的地址,也可能是新分配内存的地址,因此在重新分配内存后要基于返回的地址进行后续的处理。

使用 realloc 可以动态地调整已分配内存的大小,使其更适应程序的需求。在需要动态修改内存大小的情况下,realloc 是一个有用的函数。

free
//用于释放之前通过 malloc、calloc 或 realloc 分配的内存。
void free(void* ptr);

内存分区

32位系统的虚拟地址空间

在这里插入图片描述

每个进程的虚拟地址空间都是从0地址开始的,我们在程序中打印的变量地址也其在虚拟地址空间中的地址,程序是无法直接访问物理内存的。虚拟地址空间中用户区地址范围是 0~3G,里边分为多个区块:
在这里插入图片描述

其他

linux下 查看内存分区

在 Linux 下,可以在命令行中通过 size 命令查看二进制文件(可执行文件、静态库、动态库等)的大小和节(section)信息。

//基本语法
size [选项] [文件名]

在这里插入图片描述

解释:
text:代码段(可执行文件)或只读数据段(库文件)的大小。
data:已初始化数据段的大小。
bss:未初始化数据段(bss)的大小。
dec:代码段、数据段和bss段的总大小。
hex:十六进制表示的 dec 的大小。
filename:文件的名称。

在没有运行程序前,也就是说程序没有加载到内存前,可执行程序内部已经分好3段信息,分别为代码区(text)、数据区(data)和未初始化数据区(bss)3 个部分(有些人直接把 data 和 bss 合起来叫做静态区或全局区)。

详细教程可转

爱编程的大丙

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

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

相关文章

20-11版本AUTOSAR_PRS_LogAndTraceProtocol文档翻译

1简介和概述 本协议规范规定了AUTOSAR协议Dlt的格式、消息序列和语义。 该协议允许将诊断、日志和跟踪信息发送到通信总线上。 因此,Dlt模块从应用程序或其他软件模块收集调试信息,向调试信息添加元数据,并将其发送到通信总线。 此外&#x…

软件设计师——信息安全(一)

📑前言 本文主要是【信息安全】——软件设计师——信息安全的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1f304…

华为OD试题五(数列描述、矩阵最大值、数据分类)

1. 数列描述 示例代码&#xff1a; # 核心 从第一项 推 第N项目 # 第一项 a0 1 # 推到 第N项 N 4 def fun(a0):# 计算每一项的具体值result left 0cursor 0while cursor < len(a0):if a0[cursor] ! a0[left]:count cursor -leftresult "{}{}".format(str(…

面相对象开发的原则

1、开闭原则 对修改关闭&#xff0c;对扩展打开。 2、里氏替换原则 子类继承父类的方法时&#xff0c;不可重写父类的方法。 如果重写了父类的方法会导致整个继承体系比较差&#xff0c;特别是运用多态比较平凡时&#xff0c;程序运行出错概率较大。 如果出现了违背“里氏替换…

计网Lesson9 - 链路协议和网络概述

文章目录 数据链路层协议Ethernet V2标准Ethernet V2帧格式Ethernet V2帧长度标准以太网帧 MAC 帧协议 PPP 协议PPP 概述PPP 帧 网络层网络层的设计选择 数据链路层协议 Ethernet V2标准 Ethernet V2帧格式 以太网帧格式说明&#xff1a; 6 6 6 字节目标地址 6 6 6 字节源地…

【LeetCode每日一题】1904. 你完成的完整对局数

给你两个字符串 startTime 和 finishTime &#xff0c;均符合 "HH:MM" 格式&#xff0c;分别表示你 进入 和 退出 游戏的确切时间&#xff0c;请计算在整个游戏会话期间&#xff0c;你完成的 完整对局的对局数 。 如果 finishTime 早于 startTime &#xff0c;这表示…

verilog基础,连续赋值之组合逻辑

连续赋值语句可以完成任意组合逻辑&#xff0c;本节对基本的逻辑电路进行测试分析&#xff0c;主要包含一下内容&#xff1a; 1. 反相器 2. 与门 3.与非门 4.或门 5.或非门 6.异或门 7.同或门 verilog实现逻辑操作的算符如下 // ~ .... Invert a single-bit signal…

「Leetcode」滑动窗口—长度最小的子数组

&#x1f4bb;文章目录 &#x1f4c4;题目✏️题目解析 & 思路&#x1f4d3;总结 &#x1f4c4;题目 209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …,…

【UE 材质】角色触碰空气墙效果

效果 步骤 1. 新建一个工程&#xff0c;创建一个Basic关卡&#xff0c;添加一个第三人称游戏资源到内容浏览器 2. 新建一个材质参数集&#xff0c;这里命名为“MPC_Vector” 打开“MPC_Vector”&#xff0c;添加一个向量参数 3. 新建一个材质&#xff0c;这里命名为“M_Wall”…

力扣每日一题:2132. 用邮票贴满网格图(2023-12-14)

力扣每日一题 题目&#xff1a;2132. 用邮票贴满网格图 日期&#xff1a;2023-12-14 用时&#xff1a;38 m 32 s 思路&#xff1a;使用前缀和&#xff0b;差分&#xff0c;只是往常是一维&#xff0c;现在变二维了&#xff0c;原理差不多 时间&#xff1a;22ms 内存&#xff1…

运行和部署若依分离版前端

一、运行 一、用vscode打开 二、安装依赖 # 建议不要直接使用 cnpm 安装依赖&#xff0c;会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 npm install --registryhttps://registry.npmmirror.com# 启动服务 npm run dev浏览器访问 http://localhost:80二、部…

数据库的优化

1、创建index索引&#xff1b; 2、减少select * 的使用&#xff0c;具体一点&#xff0c;全取会增加web服务器的负担&#xff1b; 3、explain select&#xff1a;显示了mysql如何使用索引来处理select语句以及连接表&#xff1b; 4、度多使用varchar/nvarchar&#xff0c;变长…

深入解析,录制视频的软件推荐(3款)

在信息时代&#xff0c;视频成为了传递信息、分享经验的重要媒介。为了创作出更具吸引力和实用性的视频&#xff0c;选择合适的录制工具显得至关重要。本文将深入介绍3款录制视频的软件&#xff0c;通过本文&#xff0c;您将深入了解这3款软件的使用方法&#xff0c;以满足不同…

JRT文件服务实现

网站与客户端打印和导出方面已经无大碍了&#xff0c;今天抽时间整整文件服务&#xff0c;文件服务设计可以查看下面连接。原理一样&#xff0c;代码会有些变化。 文件服务设计 首先实现文件服务的服务端&#xff0c;就是一个业务脚本&#xff0c;用来接收上传、移动和删除文件…

往上走^^

欢迎来到程序小院 往上走 玩法&#xff1a;转动的圆球&#xff0c;点击固定到上方的圆中即可往上走一步&#xff0c;转动超过上面圆即游戏结束&#xff0c; 往上走一步加1分&#xff0c;快去往上走吧^^。开始游戏https://www.ormcc.com/play/gameStart/218 html <canvas wi…

Gin之GORM 查询语句

前期工作可以看之前的&#xff08;连接数据库&#xff1b;以及确定要操作的库&#xff09; Gin之GORM 操作数据库&#xff08;MySQL&#xff09;-CSDN博客https://blog.csdn.net/m0_72264240/article/details/134948202?spm1001.2014.3001.5502这次我们操作gin库下的另外一个…

Android--Jetpack--数据库Room详解二

本是青灯不归客&#xff0c;却因浊酒恋红尘 一&#xff0c;基本使用 关于Room数据库的基本使用&#xff0c;请参考文章Android--Jetpack--数据库Room详解一-CSDN博客 二&#xff0c;Room与ViewModle,LiveData的结合使用 LiveData与ViewModle的使用&#xff0c;请参考文章Andr…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑移动式储能调度的配电网灾后多源协同孤岛运行策略》

这篇文章的标题表明研究的主题是在配电网发生灾害后&#xff0c;采用一种策略来实现多源协同孤岛运行&#xff0c;并在这个过程中特别考虑了移动式储能的调度。 让我们逐步解读标题的关键词&#xff1a; 考虑移动式储能调度&#xff1a; 文章关注的焦点之一是移动式储能系统的…

国标GB28181安防监控系统/磁盘阵列EasyCVR(V.3.4)新亮点:免保活功能

TSINGSEE青犀近日发布了EasyCVR安防管理平台的V.3.4版本&#xff0c;其中一大亮点就是很多朋友都在咨询的“免保活”功能&#xff0c;那么&#xff0c;什么是“免保活”功能&#xff1f;又该如何配置呢&#xff1f; 在EasyCVR平台有个【按需直播】按钮&#xff0c;顾名思义&…

ARM流水灯

.text .global _start _start: LED1 1.RCC时钟使能GPIOE RCC_MP_AHB4ENSETR[4]->1 LDR R0,0x50000a28 LDR R1,[R0] ORR R1,R1,#(0x1<<4) STR R1,[R0] 2.设置PE10为输出模式 GPIOE_MODER[21:20]->01 先清0 LDR R0,0x50006000 LDR R1,[R0] BIC R1,R1,#(0x3<&…