16.C基础_内存管理

news2024/9/22 19:45:07

内存分区

1、整体框图

内存分为代码区、全局区、栈区、堆区。代码区和全局区在代码编译完之后就已经确定,栈区和堆区是在程序运行时进行开辟和释放的。整体内存分区框图如下:

对于一个进程,它一共有4G的空间,其中0~3G为上述的4个区(用户空间)、3G~4G为内核空间。

2、各区的含义 

2.1 代码区

代码区存放的是函数体的二进制代码,由操作系统进行管理,具有共享、只读的特征。

即:存放的是我们自己写的代码通过编译后生成的cpu执行的机器指令

2.2 全局区

全局区又叫全局静态区,存放的是全局变量、静态变量(static)、常量(const)

全局区的生命周期直到程序结束,这代表全局区的数据会一直占用空间,也代表变量随时可以访问

全局区中又分为三个区,从低地址到高地址分别为文字常量区、初始化数据区、未初始化数据区。

其中:未初始化区是指 " 没有初始化 " 或 " 以0为初始值 "的情况。具体的框图如下:

2.3 栈区

栈区是由编译器自动分配释放,存放函教的参数值、局部变量

栈区的生命周期为函数内部

2.4 堆区

由程序员分配和释放,若程序员不释放程序结束时由操作系统回收

堆区的生命周期由程序员主动释放,或程序结束自动释放

使用size查看可执行文件的内存占用情况

指令:size <可执行文件名>,单位为字节

堆区操作

注意:malloc与free必须成对出现,否则会造成内存泄漏

1、动态申请堆区空间malloc

头文件:

#include <stdlib.h>

使用方法:

<指针> = <类型强转>malloc(sizeof(类型)*空间大小);

//申请一个大小为5个的char类型的空间
char *p = NULL;
p = (char*)malloc(sizeof(char)*5);

if(p==NULL){
    printf("malloc failled");
}

2、释放申请从堆区空间free

头文件:

#include <stdlib.h>

使用方法:

//释放malloc申请的空间
free(p);//p指向malloc申请的空间

3、示例代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){

	char *p = NULL;
	//1.malloc开辟空间,并检测是否开辟成功
	p = (char*)malloc(sizeof(char)*5);
	if(p==NULL){
		printf("malloc failed\n");
		exit(-1);
	}
	//2.使用开辟的空间
	strcpy(p,"abc");
	printf("p = %s\n",p);
	//3.释放开辟的空间
	free(p);
	return 0;
}

内存泄漏与内存溢出

内存泄漏(memory leak):

内存泄漏是指申请的内存空间使用完毕之后未回收,即:没有进行free

一次内存泄露危害可以忽略,但若一直泄漏,无论有多少内存,迟早都会被占用光,最终导致程序crash。(因此,开发中我们要尽量避免内存泄漏的出现)

内存溢出(out of memory):

内存溢出是指程序在申请内存时,没有足够的内存空间供其使用。即:内存不够用

通俗理解就是内存不够用了,通常在运行大型应用或游戏时,应用或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出。最终导致机器重启或者程序crash。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2071729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flask+LayUI开发手记(三):LayUI表格的后端数据分页展现

前几天写了数据表格table的前端分页展现&#xff0c;思路是把数据一次性取到前端&#xff0c;然后由前端来控制分页展现。这种做法主要目的是为了降低后端数据库读写的次数减轻服务端运行压力。但是&#xff0c;如果功能不单是查询还要进行增删改操作&#xff0c;那么一次数据提…

自制项目镜像并拉取

1.先把项目jar包拉到Linux上看能用不 mvn clean package cd target java -jar shared_battery-0.0.1-SNAPSHOT.jar 成功&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

24-8-24-读书笔记(十五)-《空谷幽兰》([法] 巴尔扎克 [译] 李玉民 )

文章目录 《空谷幽兰》&#xff08;[法] 巴尔扎克 [译] 李玉民 &#xff09;阅读笔记记录&#xff08;P112-P126&#xff09;总结 《空谷幽兰》&#xff08;[法] 巴尔扎克 [译] 李玉民 &#xff09; 《空谷幽兰》巴尔扎克最为得意的作品&#xff0c;这篇主要记录一个德莫尔索夫…

SSRF漏洞实现

文章目录 SSRF题1SSRF题2fastcgi方法 入侵网站收集资产方法SSRF反弹 SSRF题1 漏洞复现平台 代码&#xff1a; 首先&#xff0c;可以用dict探测一下内网开放的端口 可以检测是否有fastcgi或者是redis&#xff0c;如果有fastcgi&#xff0c;那么就有RCE漏洞破解&#xff0c;如…

Adobe Animate (AN)软件安装,硬件配置(附安装包)

目录 一、Adobe An 软件简介 Adobe An 软件的特点 Adobe An 软件的优势 下载 二、Adobe An 软件安装 安装前的准备工作 安装过程中的注意事项 安装后的设置 三、Adobe An 软件使用 高级动画技巧 交互设计 优化与性能提升 四、Adobe An 软件快捷键 选择工具快捷键…

专业级推荐:2024年硬盘数据恢复软件全攻略

硬盘作为我们存储珍贵数据、工作文档、家庭照片以及个人视频的核心载体&#xff0c;其重要性不言而喻。然而&#xff0c;随着使用时间的增长或是操作不当硬盘可能会遭遇损坏。遇到这种问题我们要怎么挽救自己的数据呢&#xff0c;这次我就来分享下我用过的硬盘数据恢复软件。 …

基于Netty的RPC框架

RPC远程过程调用(Remote Procedure Call)是一种通信协议&#xff0c;它允许程序调用位于不同地址空间&#xff08;通常是网络上的另一台机器&#xff09;的方法&#xff0c;而无需程序员显式编码这个远程调用的细节。这种技术隐藏了底层的通讯细节&#xff0c;使得调用远程服务…

中国数据库的崛起:从本土化挑战到全球化机遇

引言 谈起中国的崛起&#xff0c;大家第一反应可能是“中国制造”“高铁奇迹”“电商帝国”&#xff0c;但今天我们要聊的&#xff0c;是一个比这些还要神秘的存在——中国的数据库技术。或许你平时并不会经常关注它&#xff0c;但这个隐身在你手机、电脑、服务器背后的无形力…

Towards Enriched Controllability for Educational Question Generation

文章目录 题目摘要引言生成显式和隐式问题实验设置结果基线结论 题目 迈向教育问题生成的丰富可控性 论文地址:https://arxiv.org/abs/2306.14917 摘要 问题生成 (QG) 是自然语言处理 (NLP) 中的一项任务&#xff0c;涉及根据输入自动生成问题&#xff0c;输入通常由文本和目标…

在进行网站链接时,‌加上http或https的重要性不言而喻

这一简单的操作背后&#xff0c;‌蕴含着对搜索引擎优化&#xff08;‌SEO&#xff09;‌的深刻理解&#xff0c;‌以及对网站权重提升的精准把握。‌以下&#xff0c;‌我们将深入探讨这一话题&#xff0c;‌以期为您的网站优化提供有价值的参考。‌优化&#xff08;‌SEO&…

即时通讯IM软件推荐:五款适合企业内部使用的IM即时通讯软件

随着企业的不断发展&#xff0c;内部沟通和协作变得尤为重要。为了提高沟通效率、加强团队协作以及促进信息共享&#xff0c;企业需要选择适合自身需求的即时通讯IM软件。本文将为大家推荐五款适合企业内部使用的IM即时通讯软件&#xff0c;其中包括了备受赞誉的WorkPlus。 Wor…

SPSS和MATLAB实现【典型相关分析】

典型相关分析&#xff08;Canonical Correlation analysis &#xff09;&#xff0c;是用于研究 两组 变量&#xff08;每组变量中都可能有多个指标&#xff09; 之间相关关系的一种多元统计方法。它能够揭示出两组变量之间的内在联系。 我们之前总结的相关性分析&#xff0c;也…

libtorch学习历程(二):张量

libtorch(pytorch c)的大多数api和pytorch保持一致。 使用之前要导入torch #include <torch/torch.h> #include <torch/script.h> 1. 张量初始化 1.1 固定的值与尺寸 在C中&#xff0c;使用{}来表示尺寸 zeros() zeros()产生值全为0的张量。 // 得到一个三维…

Java数据结构篇

Map体系 1.HashMap 哈希冲突&#xff1a;开放定址法、再哈希法、链地址法插入元素先检查是否到达阈值&#xff0c;是则先数组扩容&#xff0c;然后再插入链表&#xff0c;链表长度超过8则转红黑树1.7之前由于扩容导致的头插法尾插法混合导致指针错误&#xff0c;出现死循环问…

[底层原理] C/C++获取时间(将时间戳转换为年月日)?

前言 大家都知道&#xff0c;计算机中存储的时间是一个整数&#xff0c;在现在的编程语言中&#xff0c;可以很方便地将时间戳&#xff08;整数&#xff09;转换为字符串&#xff0c;但是如果没有这些我们该如何自己计算出呢&#xff1f; 刚好以前研究过Nginx的源代码&#xff…

docker系列12:Dockerfile实战

传送门 docker系列1&#xff1a;docker安装 docker系列2&#xff1a;阿里云镜像加速器 docker系列3&#xff1a;docker镜像基本命令 docker系列4&#xff1a;docker容器基本命令 docker系列5&#xff1a;docker安装nginx docker系列6&#xff1a;docker安装redis docker系…

红黑树、B+Tree、B—Tree

红黑树 B-Tree 这三个通常都是把内存全部加载到内存里&#xff0c;然后再内存中进行处理的&#xff0c;数据量通常不会很大。 内存一般容量都在GB级别&#xff0c;比如说现在常见的4G、8G或者16G。 如果要处理的数据规模非常大&#xff0c;大到内存根本存不下的时候。这个时候…

基于微信小程序靓丽内蒙古APP(源码+定制+辅导)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

验证码功能的思路和做法

验证码登录的思路和流程 步骤 1.导入依赖 <dependency><groupId>com.github.axet</groupId><artifactId>kaptcha</artifactId><version>0.0.9</version> </dependency> 2.写一个验证码的配置类 package com.lzy.config;im…

IM即时通讯软件,企业即时通讯系统就选WorkPlus

在现代企业中&#xff0c;高效的沟通和协作是推动业务发展的关键。随着科技的不断进步&#xff0c;团队成员和企业之间的沟通已经超越了传统的邮件和电话方式&#xff0c;转向了更实时、更便捷的方式&#xff0c;即即时通讯软件。在众多即时通讯软件中&#xff0c;WorkPlus作为…