前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C 中内存的一些操作

C 中内存的一些操作

作者头像
ke1th
发布2018-01-02 11:14:57
5700
发布2018-01-02 11:14:57
举报

分配内存与释放内存

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

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

一、 malloc

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

函数原型为:

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

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

二、realloc

re-allocate, 重新分配内存块

函数原型为:

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

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

三、calloc

函数原型为:

代码语言:javascript
复制
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
复制
void free (void* ptr);
  • 回收分配的内存块
  • ptr , 内存块的第一个字节的地址(malloc,realloc,calloc 的返回值)

内存间数据的移动和复制

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

一、 memcpy

函数原型:

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

二、 memmove

函数原型:

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分配内存与释放内存
    • 一、 malloc
      • 二、realloc
        • 三、calloc
          • 四、free
          • 内存间数据的移动和复制
            • 一、 memcpy
              • 二、 memmove
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档