首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C 中内存的一些操作

C 中内存的一些操作

作者头像
ke1th
发布于 2018-01-02 03:14:57
发布于 2018-01-02 03:14:57
64900
代码可运行
举报
运行总次数:0
代码可运行

分配内存与释放内存

在C 中,下列函数的声明在 stdlib.h 中,在 C++, 声明在 cstdlib

  • malloc
  • realloc
  • calloc
  • free , 释放分配的内存(分配的内存块的头部记录了当前分配内存块的大小)

一、 malloc

malloc(memory allocate)在堆上分配内存, 分配内存块

函数原型为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void* malloc(size_t size);
  • size : 所需内存字节数
  • 如果成功,返回内存第一个字节的地址。如果不成功,返回空指针!

http://www.cplusplus.com/reference/cstdlib/malloc/

二、realloc

re-allocate, 重新分配内存块

函数原型为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void* realloc (void* ptr, size_t size);
  • 改变 ptr 指向的内存块的大小, 此函数可能会移动内存块到一个新的位置。
  • ptr ,指向被分配的 内存块
  • size , 目标内存块大小

http://www.cplusplus.com/reference/cstdlib/realloc/

三、calloc

函数原型为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void* calloc (size_t num, size_t size);
  • Allocate and zero-initialize array
  • num , 元素的个数
  • size, 每个元素的大小
  • 相当于 分配了 num*size 个 字节,并初始化为 0

http://www.cplusplus.com/reference/cstdlib/calloc/

四、free

函数原型为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void free (void* ptr);
  • 回收分配的内存块
  • ptr , 内存块的第一个字节的地址(malloc,realloc,calloc 的返回值)

内存间数据的移动和复制

memcpy和 memmove 在头文件 string.h (C)/ cstring(C++)中,

一、 memcpy

函数原型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void * memcpy ( void * destination, const void * source, size_t num );
  • 从 source 中 复制 num 个字节到 destination 中。
  • 不会对 destination 和 source 做越界检查

二、 memmove

函数原型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void * memmove ( void * destination, const void * source, size_t num );
  • 从 source 中 复制 num 个字节到 destination 中。
  • 会先拷贝到一个 buffer 中,然后再到 destination 中, destination 和 source 可以 overlap
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C语言】内存管理&&内存管理函数&&文件管理&&文件管理函数
实际上普通的局部变量是在栈区分配空间的,栈区的特点时在上面创建的变量出了作用域就销毁
用户10925563
2024/06/04
5400
【C语言】内存管理&&内存管理函数&&文件管理&&文件管理函数
C语言——动态内存管理与内存操作函数
主要是系统用于自动分配给全局变量、static修饰的变量内存的。它们在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。
星辰与你
2024/10/17
1790
C语言——动态内存管理与内存操作函数
这些基础不要瞧不上——C的内存操作函数
在C/C++编程中,内存操作是至关重要的一环。合理使用内存操作函数不仅能提升程序的性能,还能提高代码的稳定性和安全性。本文将介绍几种常用的内存操作函数,包括malloc、calloc、realloc、free、memset、memcpy和memmove等,并提供相应的示例代码。
程序员的园
2024/11/25
2610
这些基础不要瞧不上——C的内存操作函数
了解内存函数
内存函数不止malloc、calloc、realloc、free还有memcpy、memmove、memset、memcmp。前四个的头文件是<stdlib.h>,后四个的头文件是<string.h>。
秋邱
2024/10/09
1530
了解内存函数
【c语言】详解动态内存管理
在学习c语言时我们知道数据结构通常是固定大小的。就拿数组举例,一旦程序完成编译,那么数组的大小及元素的个数就确定了。那么在不修改程序并且再次编译程序的情况下就无法改变数据结构的大小。总结就是下面两个特点:
用户11029269
2024/03/19
1430
【c语言】详解动态内存管理
从 C++ STD::VECTOR的RESIZE和RESERVE看VECTOR的源码实现
https://www.cnblogs.com/yocichen/p/10574819.html https://www.kancloud.cn/digest/stl-sources/177267
早起的鸟儿有虫吃
2022/01/20
2.2K0
从 C++ STD::VECTOR的RESIZE和RESERVE看VECTOR的源码实现
C /C++标准库 - <cstdlib>(stdlib.h)
standard library标准库头文件,是一个大杂烩,定义和声明一些没有明显的归属的宏和函数。
用户7886150
2021/02/15
1K0
【C语言】动态内存管理之4个内存函数`malloc`,`free`,`calloc`和`realloc`深度了解
本小节,我们学习动态内存管理:为什么要有动态内存分配?4个动态内存开辟函数:malloc,free,calloc和realloc,这些C标准库中的内存管理函数都声明在在 stdlib.h 头⽂件中。干货满满!学习起来吧😃!
学习起来吧
2024/02/29
5450
【C语言】动态内存管理之4个内存函数`malloc`,`free`,`calloc`和`realloc`深度了解
【C语言】动态内存函数介绍
返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。
大耳朵土土垚
2024/03/13
1160
【C语言】动态内存函数介绍
C语言动态内存管理
在C语言编程中,动态内存管理是一项核心技能,它允许程序在运行时灵活地分配和释放内存。相比于静态内存分配,动态内存分配能够更有效地处理不确定或变化的数据大小,极大地增强了程序的灵活性和效率。然而,动态内存管理也带来了一些挑战,如内存泄漏、越界访问和悬挂指针等问题。掌握这些动态内存管理的基本概念和技术,对于编写高效、稳定的C程序至关重要。在本文中,我们将深入探讨C语言中的动态内存管理,包括其基本概念、相关函数以及使用时的注意事项。帮助你更好地管理和优化程序的内存。
平凡之路.
2024/10/09
1990
C语言动态内存管理
深入挖掘C语言 ----动态内存分配
C语言提供了另外一个函数free, 专门是用来做动态内存释放和回收的, 函数原型如下:
用户11317877
2024/10/16
1560
深入挖掘C语言 ----动态内存分配
【C语言基础】:内存操作函数
注意:memcpy函数不可以拷贝重叠的内存块(虽然也能实现)但不安全,对于重叠的内存块,memmove是一种更安全的方法。
爱喝兽奶的熊孩子
2024/04/10
1320
【C语言基础】:内存操作函数
C语言内存函数超详解
C语言为我们提供了字符串的一些函数,比如复制,比较等等,但是这些函数只能用在字符串上,而C语言的数据类型显然不止字符串一种,那应该怎么办?难道要把每一种数据类型都包装几个函数供我们使用吗?显然这太过臃肿。 为了解决这个问题,C语言在string.h库中提供了内存函数供我们使用。
fhvyxyci
2024/09/24
1400
C语言内存函数超详解
[C++] 深度剖析C_C++内存管理机制
定位new表达式语法:void* operator new(size_t, void* place) noexcept { return place; }
DevKevin
2024/07/25
1870
[C++] 深度剖析C_C++内存管理机制
回溯1:动态内存管理与C语言实践
在C语言中,内存管理是一个非常重要的部分,尤其是动态内存管理。程序在运行时所需的内存大小往往是未知的,因此无法依赖编译时的静态内存分配。在这种情况下,动态内存管理成为程序员处理复杂数据结构时的有力工具。本篇文章将详细讲解C语言中的动态内存管理原理、常用函数及其典型应用,并通过相关代码示例来论证。
用户11289931
2024/11/24
4050
动态内存分配
                                                               2.数组在申明的时候,必须指明数组的长度,它所需要的                                                                    内存在编译时分配。
see.
2024/06/04
3050
动态内存分配
C语言从入门到实战——动态内存管理
在C语言中,动态内存管理是指程序运行时,通过调用特定的函数动态地分配和释放内存空间。动态内存管理允许程序在运行时根据实际需要来分配内存,避免了静态内存分配在编译时就确定固定大小的限制。
鲜于言悠
2024/03/20
3920
C语言从入门到实战——动态内存管理
C语言——内存函数【memcpy,memmove,memset,memcmp】
🔍重点提取: ①所在头文件:string.h ②函数原型: ●void * memcpy ( void * destination, const void * source, size_t num ); ●destination(目标空间),source(源头),num(字节个数) ③函数功能: ●从source指向的位置开始向后复制num个字节的数据到destination指向的位置 ④注意: ●函数在遇到\0的时候不会停止 ●如果要复制num个字节,那么source和destination的数组大小至少为num字节 ●如果source和destination的内存块有重叠,那复制的结果是未定义的(有重叠的时候,最好用memmove)
用户11029137
2024/03/19
6600
C语言——内存函数【memcpy,memmove,memset,memcmp】
c语言进阶部分详解(详细解析动态内存管理)
上篇文章介绍了枚举,联合相关的内容,大家可以点击链接进行浏览:c语言进阶部分详解(详细解析自定义类型——枚举,联合(共用体))-CSDN博客
是Nero哦
2024/01/18
1720
c语言进阶部分详解(详细解析动态内存管理)
深入探索C语言动态内存分配:释放你的程序潜力
如果我们要用这个数组来存储数据的话只能存储100个char型的数据,如果再想要往数组内添加数据的话就会越界。
DevKevin
2024/03/24
2560
相关推荐
【C语言】内存管理&&内存管理函数&&文件管理&&文件管理函数
更多 >
LV.1
这个人很懒,什么都没有留下~
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档