存储空间的分配(UNIX环境高级编程笔记)

2024-03-30 03:48

本文主要是介绍存储空间的分配(UNIX环境高级编程笔记),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  (1)malloc,分配指定字节的存储区。此存储区中的初值不确定。
  (2)calloc,为指定数量指定长度的对象分配存储空间。该空间的每一bit都初始化为0。
  (3)realloc,增加或减少以前分配区的长度。当长度增加后,可能需要将以前分配区的内容移动到另一个足够大的区域,以便在尾端提供增加的存储区,而新增区域内的初始值则不确定。

#include <stdlib.h>
void *malloc(size_t size);
void *calloc(size_t nobj, size_t size);
void *realloc(void *ptr, size_t newsize);
        3个函数的返回值:若成功,返回非空指针;若出错,返回NULL
void free(void *ptr);

  这3个alloc函数都返回通用指针void *,所以如果在进程中包含了#include <stdlib.h>,那么我们将这些函数的返回的指针赋予一个不同类型的指针时,就不需要进行显式的进行强制类型转换。
  函数free释放ptr指向的储存空间。被释放的空间通常被送入可用存储区池,以后可在调用上述3个alloc函数时再分配。
  realloc函数可以增、减以前分配的存储区的长度。最后一个参数是新储存区的新长度,不是新旧存储区之间的差。若ptr是一个空指针,则realloc的功能和malloc相同。
  这些分配例程通常通过sbrk系统调用实现。该系统调用扩充或者缩小进程的堆。
  大多数实现所分配的存储空间比所要求的要大一点,额外的空间用来记录管理信息——分配块的长度、指向下一分配块的指针等。
  在动态分配的缓冲区之前或之后进行写操作,破坏的可能不仅仅是该区的管理记录信息。
  其他可能造成的致命性错误是:释放一个已经释放的块;调用free时所用的指针不是alloc函数的返回值等。如果一个进程调用malloc函数,但是却忘记free,则此进程占用的存储空间就会连续增加,这被称为泄露(leakage)。如果不调用free函数释放不再使用的空间,那么进程地址空间的长度就会慢慢增加,甚至不再有地址空间。此时,由于过度的换页开销,会造成性能下降。
  与很多可代替malloc和free的函数。某些系统已经提供代替存储空间分配函数的库。

这篇关于存储空间的分配(UNIX环境高级编程笔记)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/860398

相关文章

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.