C语言的那些小秘密之【内存分配】
FROM: http://blog.csdn.net/bigloomy/article/details/6581706
=============================================================
realloc()函数
原型:extern void *realloc(void *mem_address, unsigned int newsize);
语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。
头文件:#include <stdlib.h> 有些编译器需要#include <alloc.h>,在TC2.0中可以使用alloc.h头文件
功能:先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域,同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。
返回值:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
注意:这里原始内存中的数据还是保持不变的。当内存不再使用时,应使用free()函数将内存块释放。
malloc()函数
原型:extern void *malloc(unsigned int num_bytes);
头文件:在TC2.0中可以用malloc.h或 alloc.h (注意:alloc.h 与 malloc.h 的内容是完全一致的),而在Visual C++6.0中可以用malloc.h或者stdlib.h。
功能:分配长度为num_bytes字节的内存块
返回值:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。
说明:关于该函数的原型,在旧的版本中malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。
calloc()函数
calloc是一个C语言函数
功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
跟malloc的区别:
calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
用 法: void *calloc(unsigned n,unsigned size);
头文件:stdlib.h或malloc.h
#include <stdio.h>
#include <stdlib.h>
int main(void)
{ int num = 10;int i; long *p = (long *)malloc(num * sizeof(long)); long *p1=(long *)calloc(num,sizeof(long));for (i = 0; i < num; i++){printf("%d\t", p[i]);}for (i = 0; i < num; i++){printf("%d\t", p1[i]);}printf("内存地址: %p\n~~~~~~~~\n", p); for (i = 0; i < num; i++)p[i] = i+1; for (i = 0; i < num; i++) printf("%d\t", p[i]); printf("\n------------------\n");num = 4; p = (long *)realloc(p, num*sizeof(long)); printf("内存地址: %p\n~~~~~~~~\n", p);for (i = 0; i < num; i++) printf("%d\t", p[i]); printf("\n------------------\n"); num = 10; p = (long *)realloc(p, num*sizeof(long)); printf("内存地址: %p\n~~~~~~~~\n", p); for (i = 0; i < num; i++) printf("%d\t", p[i]);free(p); free(p1);getchar(); return 0;
}
运行结果为:
由数据可以很直观的看出他们之间的区别
=====================================================================================
转载于:https://www.cnblogs.com/iplus/archive/2013/03/05/4467331.html
C语言的那些小秘密之【内存分配】相关推荐
- 计算机二级换c语言,09年计算机二级C语言辅导:C技巧(内存分配:更换策略,不要为难内存)...
09年计算机二级C语言辅导:C技巧(内存分配:更换策略,不要为难内存) 分类:计算机等级| 更新时间:2008-11-21| 来源:教育联展网 在32位机上(64位也是一样的,但是空间大很多),一个进 ...
- linux c语言 glibc 错误 munmap,Linux内存分配小结--malloc、brk、mmap
Linux的虚拟内存管理有几个关键概念: 1.每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址: 2.虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟空间地址)与物理地址进行 ...
- C语言在STM32中的内存分配
01.前言 不说废话,先上示例代码 uint8_t num_byte[4]; uint32_t num_word; const uint32_t num_word_const = 0x1234; ui ...
- 【C语言】为什么存在动态内存分配
文章目录 前言 一.动态内存分配 定义 二.动态内存分配的意义 1.可以控制所开辟的内存大小 2.可以多次利用这部分空间 三,动态内存函数的介绍 前言 提示:我们先来看一个在vs编译器下,同学们常犯的 ...
- C语言学习笔记之动态内存分配结构体——辣鸡版学生管理系统
@[C语言学习笔记] 小辣鸡自学C语言中,好多视频教程都有这个案例,小辣鸡自己边学边记,下边是代码. 如有错误,感谢告知!!! #include<stdio.h> #include< ...
- java 线程 内存分配内存_漫谈JAVA语言的内存分配
在说JAVA语言的内存分配之前,我们先聊聊OS的Memory Management,这是学习操作系统课程的一个重要内容.从这里开始理解内存分配有利于理解的更深入. 我们知道物理内存是由page 和se ...
- C语言之内存模型以及动态内存分配
目录 内存分区模型 C/C++内存开辟 按照程序运行前后分区 程序运行前 代码区 全局区 程序运行后 栈区 堆区 关于栈 栈与静态区(数据段) 动态内存分配 那么使用动态内存的好处在哪? 常见的内存使 ...
- C/C++——动态内存分配
动态内存分配,就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法.动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序 ...
- 静态内存分配与动态内存分配
静态内存分配与动态内存分配 动机 平时看c/c++的书籍时,总会看到一种观点,说是C/C++语言使用的时候动态内存分配是最重要的,使用malloc等函数分配的内存必须要释放,否则及其容易出现内存泄露. ...
- C/C++ 动态内存分配
转自:https://blog.csdn.net/Code_beeps/article/details/89625473#comments 首先我们看看 c 语言是如何进行动态内存分配的: c 语言主 ...
最新文章
- Android KTV
- r语言 调用 c,R语言数据的输入和输出操作
- java swing web_Java-JFrame-swing嵌套浏览器步骤
- [ python ] 多态
- 美团的大数据产品,互联网的数字化转型,如何从0做到100?
- 网络粘包解包问题杂谈
- 大数据之clickhouse各类引擎
- 计算机操作系统产生的先后顺序,任务调度优先级
- 超好用的卸载软件 —— Geek
- php加密的是什么,看看下面这个php代码是使用什么加密的?
- 今日头条18校招算法笔试
- Automatic White Balance(AWB)/Color Constancy(CC)系列论文
- oracle导入solr,从Oracle数据库导入XML数据时solr dih会变慢
- 关于浏览器自动安装Screenshot Pro拓展的问题
- 大文件传输软件的优势有哪些?-镭速传输
- Linux ora-12514多实例,ORA-12514问题解决
- SpringBoot 基础入门
- 《上海市智慧高速公路建设技术导则》发布!
- 湖北软件登记测试,第三方软件测评软件登记测试的流程
- Word排版——插入新公式||公式由斜式变横式
热门文章
- 管理感悟:严重问题与怪问题
- 服务器磁盘会影响应用么,想了解服务器磁盘的IO吞吐量,用sqlio 工具会不会对当前服务器有影响...
- java中的包装类和基本类型_java中基本类型和包装类型实践经验
- 如何把R加到环境变量 Linux,如何设置R的环境变量以在RedHat Linux(RHEL6)上的Tomcat中使用...
- docker php示例,Docker 编程语言之 PHP
- android 简介动画,android动画简介
- 得到照片_用PS制作重曝效果的人像艺术照片
- ceph客户端使用_Ceph 基础篇 认证
- java 人脸识别 demo_基于虹软sdk,java实现人脸识别(demo)
- 台达a2_台达伺服ASDA-A2系列解决五轴CNC方案助力雕刻机行业换代升级