C 中内存的一些操作

分配内存与释放内存

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

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

一、 malloc

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

函数原型为:

void* malloc(size_t size);
  • size : 所需内存字节数
  • 如果成功,返回内存第一个字节的地址。如果不成功,返回空指针!

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

二、realloc

re-allocate, 重新分配内存块

函数原型为:

void* realloc (void* ptr, size_t size);
  • 改变 ptr 指向的内存块的大小, 此函数可能会移动内存块到一个新的位置。
  • ptr ,指向被分配的 内存块
  • size , 目标内存块大小

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

三、calloc

函数原型为:

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

函数原型为:

void free (void* ptr);
  • 回收分配的内存块
  • ptr , 内存块的第一个字节的地址(malloc,realloc,calloc 的返回值)

内存间数据的移动和复制

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

一、 memcpy

函数原型:

void * memcpy ( void * destination, const void * source, size_t num );
  • 从 source 中 复制 num 个字节到 destination 中。
  • 不会对 destination 和 source 做越界检查

二、 memmove

函数原型:

void * memmove ( void * destination, const void * source, size_t num );
  • 从 source 中 复制 num 个字节到 destination 中。
  • 会先拷贝到一个 buffer 中,然后再到 destination 中, destination 和 source 可以 overlap

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习之tensorflow实战篇

利用python内置函数,快速统计单词在文本中出现的次数

#coding=utf-8 import collections import os with open('str.txt') as file1:#打开文本...

42880
来自专栏从流域到海域

《笨办法学Python》 第32课手记

《笨办法学Python》 第32课手记 本节课讲for循环和list,list里类似于c中的数组,但有区别很大。C语言中的数组是数据类型相同的值的集合,list...

21390
来自专栏Petrichor的专栏

python: map函数

对 sequence 中的 item 依次执行 function(item),将 执行结果 组成一个 List 返回。

28020
来自专栏lgp20151222

Class.forName()用法详解

主要功能 Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,...

22010
来自专栏Golang语言社区

[基础篇]Go语言变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。 Go 语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。 声...

38970
来自专栏Python小屋

Python运算符is与==的区别

在Python中,关系运算符==用来测试两个对象的值是否相等,而同一性测试运算符is用来测试两个对象是否是同一个对象,如果两个变量是同一个对象,那么它们的内存地...

23740
来自专栏五分钟学算法

每天一算:Intersection of Two Arrays II

leetcode上第350号问题:Intersection of Two Arrays II

10820
来自专栏程序员互动联盟

【编程基础】C语言指针、引用和取值

什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量。“引用”表示计算机内存地址。从指针指向的内存读取数据称作指针的取值。指针可以...

38270
来自专栏C/C++基础

C++11 原生字符串

原生字符串(Raw String)指不进行转义“所见即所得”的字符串。很多编程语言早已支持原生字符串,如C#、Python、Shell等。C++作为一门高级程序...

20220
来自专栏LhWorld哥陪你聊算法

Linux篇---Grep和正则匹配

\                  转义字符 .                      匹配任意单个字符 [1249a],[^12],[a-k]  字符序...

51030

扫码关注云+社区

领取腾讯云代金券