C++--------内存结构

  1. C++内存结构

    • 程序内存分区
      • 栈区(Stack):由编译器自动分配和释放,用于存放函数的参数值、局部变量等。其操作方式类似于数据结构中的栈,先进后出。例如,在函数调用时,函数内部的局部变量会被压入栈中,函数执行完毕后,这些变量会按照相反的顺序出栈释放。
      • 堆区(Heap):这部分内存需要程序员手动分配和释放,通过mallocnew等函数来分配空间,使用freedelete等函数来释放空间。比如,当需要动态分配一个数组来存储不确定数量的数据时,就会在堆区进行操作。
      • 全局/静态存储区(Global/Static):存放全局变量和静态变量。全局变量在整个程序生命周期内都存在,静态变量根据其定义(如函数内的静态变量)在相应的作用域内一直存在。
      • 常量存储区(Constant):用于存放常量字符串等不可修改的数据。例如,const char* str = "Hello";中的"Hello"就存储在常量存储区。
    • 内存地址和指针:内存中的每个字节都有一个唯一的地址,在C++中可以通过指针来访问这些地址。指针是一个变量,它存储了另一个变量的内存地址。例如,int* ptr;声明了一个可以指向int类型变量的指针,ptr = &var;var的地址赋给ptr,然后可以通过*ptr来访问var所存储的值。
  2. 位、字节和字

    • 位(Bit):是计算机存储信息的最小单位,只有0和1两种状态。它用于表示二进制数中的一位。
    • 字节(Byte):通常由8个位组成,是计算机中常用的基本存储单位。可以表示一个字符(ASCII码)或者一个小范围的整数(0 - 255)等。例如,一个字节可以存储'A'(ASCII码值为65)这个字符。
    • 字(Word):字的长度因计算机体系结构而异,在16位计算机中,一个字是16位(2个字节);在32位计算机中,一个字是32位(4个字节);在64位计算机中,一个字是64位(8个字节)。它是CPU一次能处理的数据长度,用于提高数据处理效率。
  3. 二进制和十六进制的表现

    • 二进制:以2为基数的计数系统,只有0和1两个数字。在C++中,二进制数可以用于位运算等操作。例如,int num = 0b1010;(C++ 14及以上支持这种二进制字面量的表示方法)定义了一个二进制数1010对应的十进制数为10的变量。
    • 十六进制:以16为基数的计数系统,数字包括0 - 9和A - F(或a - f)。十六进制常用于表示内存地址或者二进制数据的紧凑形式,因为每一位十六进制数可以表示4位二进制数。例如,0xFF表示二进制的11111111,十进制的255。在C++中,可以用0x前缀来表示十六进制数,如int color = 0x00FF00;可能用于表示颜色值。
  4. 表示其他数据类型

    • 整数类型:C++有多种整数类型,如char(通常1个字节)、short(通常2个字节)、int(通常4个字节)、long(在32位系统中通常4个字节,64位系统中通常8个字节)和long long(通常8个字节)。这些类型可以表示不同范围的整数,并且可以用不同的进制来初始化,如int decimal = 10;(十进制)、int octal = 012;(八进制,以0开头)、int hexadecimal = 0xA;(十六进制,以0x开头)。
    • 浮点数类型:包括float(单精度浮点数,通常4个字节)和double(双精度浮点数,通常8个字节)。浮点数用于表示带有小数部分的数值,它们在内存中的存储格式遵循IEEE 754标准,以科学计数法的形式存储。例如,float num = 3.14f;(注意f后缀用于表示单精度浮点数)。
    • 字符类型和字符串类型char类型用于表示单个字符,如char ch = 'A';,而字符串可以用字符数组(如char str[] = "Hello";)或者string类(#include <string>,如std::string str = "World";)来表示。字符在内存中以ASCII码(或其他字符编码)的形式存储。
  5. 为变量分配内存

    • 自动分配(栈区):对于局部变量,当程序执行进入变量的作用域时,编译器会自动在栈区为其分配内存。例如,在函数void func() { int num = 5; }中,num是一个局部变量,当func函数被调用时,在栈区为num分配4个字节(假设int为4个字节)的内存空间来存储其值。
    • 动态分配(堆区):使用new关键字(C++)可以在堆区为变量分配内存。例如,int* ptr = new int;在堆区分配了一个int类型大小的内存空间,并将其地址存储在ptr指针中。对于数组,可以使用int* arr = new int[10];来分配一个包含10个int元素的数组。需要注意的是,使用new分配的内存必须使用delete(对于单个变量)或delete[](对于数组)来释放,以避免内存泄漏。
    • 在这里插入图片描述

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

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

相关文章

f(f(x))=x^2 -11x+36, 求f(6)的值,

偶然看到的一个题目&#xff0c;一时兴起&#xff0c;做了一下。题目如下 简单粗暴的思路是待定系数法&#xff0c;盲猜f(x)是个2次函数&#xff0c;令f(x)ax^2bxc ,带入原式&#xff0c;发现矛盾&#xff08;计算略&#xff09;就想放弃了。 忽然看到如果带入6 的话&#xf…

用Python PySide6 复刻了两软件UI 做下练习

图样 1 代码 1&#xff1a; # -*- coding: utf-8 -*-import sys from PySide6.QtCore import (QCoreApplication, QMetaObject, QRect, QDate) from PySide6.QtGui import QIcon, QPixmap, QColor from PySide6.QtWidgets import (QApplication, QDialog, QLineEdit, QPushBut…

活动图的理解和实践

在软件开发和系统设计中&#xff0c;理解系统的工作流程和并发行为是至关重要的。活动图作为一种重要的建模工具&#xff0c;为我们提供了一种直观且有效的方法来描述这些复杂的过程。本文将详细探讨活动图的理解与实践&#xff0c;包括其基本概念、用途、构建方法以及实际应用…

Redis缓存数据库

1、介绍 redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库 redis的官网&#xff1a;redis.io 注:域名后缀io属于国家域名&#xff0c;是british Indian Ocean territory&#xff0c;即英属印度洋领地 1、redis的特点: 1.丰富的数…

flink sink kafka

接上文&#xff1a;一文说清flink从编码到部署上线 之前写了kafka source&#xff0c;现在补充kafka sink。完善kafka相关操作。 环境说明&#xff1a;MySQL&#xff1a;5.7&#xff1b;flink&#xff1a;1.14.0&#xff1b;hadoop&#xff1a;3.0.0&#xff1b;操作系统&#…

WebRTC搭建与应用(五)-Coturn踩坑记

WebRTC搭建与应用(五)-Coturn踩坑记 近期由于项目需要在研究前端WebGL渲染转为云渲染&#xff0c;借此机会对WebRTC等有了初步了解&#xff0c;在此记录一下&#xff0c;以防遗忘。 第五章 WebRTC搭建与应用(五)-Coturn踩坑记 文章目录 WebRTC搭建与应用(五)-Coturn踩坑记前…

@vue/cli启动异常:ENOENT: no such file or directory, scandir

参考:https://blog.csdn.net/qq_44355188/article/details/122239566 首先异常报错是&#xff1a;ENOENT: no such file or directory, scandir ‘D:\Data\Project\VueProject\hello\node_modulesvue\cli-plugin-eslint\locales’&#xff1b;我的vue/cli版本是 4.5.15 重点是…

Git进阶:本地或远程仓库如何回滚到之前的某个commit

在Git的使用过程中&#xff0c;我们经常会遇到需要回滚到之前某个commit的情况。无论是为了修复错误、撤销更改&#xff0c;还是为了重新组织代码&#xff0c;回滚到特定commit都是一个非常有用的技能。本文将介绍几种常用的回滚方法&#xff0c;帮助读者更好地掌握Git版本控制…

【java设计模式】1 - 软件设计原则

1&#xff0c;软件设计原则 在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发程序&#xff0c;从而提高软件开发效率、节约软件开发成本和维护成本。 1.1 开闭原则 对扩展开…

如何安全获取股票实时数据API并在服务器运行?

以下是安全获取股票实时数据 API 并在服务器运行的方法&#xff1a; 选择合适的券商或交易平台 评估自身需求&#xff1a;明确自己的交易策略、交易品种、交易频率等需求&#xff0c;以及对 股票api 的功能、性能、稳定性等方面的要求。调研券商或平台&#xff1a;了解不同券商…

kali切换root用户显示su: Authentication failure解决方案

1.切换root用户显示su: Authentication failure 2.解决方式&#xff1a;使用sudo su命令 3.密码新版的应该都是kali

一篇文章学会HTML

目录 页面结构 网页基本标签 图像标签 超链接标签 文本链接 图像链接 锚链接 功能链接 列表 有序列表 无序列表 自定义列表 表格 跨列/跨行 表头 媒体元素 视频 音频 网站的嵌套 表单 表单元素 文本框 单选框 多选框 按钮 下拉框 文本域和文件域 表…

【开源】一款基于SpringBoot的智慧小区物业管理系统

一、下载项目文件 项目文件源码链接&#xff1a;https://pan.quark.cn/s/3998d958e182如出现网盘空间不够存的情况&#xff01;&#xff01;&#xff01;解决办法是先用夸克手机app注册&#xff0c;然后保存上方链接&#xff0c;就可以得到1TB空间了&#xff01;&#xff01;&…

北理工计算机考研难度分析

总体情况概述 北京理工大学计算机学院2024届考研呈现出学硕扩招、专硕稳定的特点。学硕实际录取27人(含非全统考)&#xff0c;复试线360分&#xff0c;复试录取率76%&#xff1b;计算机技术专硕(不含珠海)实际录取29人&#xff0c;复试线324分&#xff0c;复试录取率86%。两个…

细说STM32F407单片机轮询方式读写SPI FLASH W25Q16BV

目录 一、工程配置 1、时钟、DEBUG 2、GPIO 3、SPI2 4、USART6 5、NVIC 二、软件设计 1、FALSH &#xff08;1&#xff09;w25flash.h &#xff08;2&#xff09; w25flash.c 1&#xff09;W25Q16基本操作指令 2&#xff09;计算地址的辅助功能函数 3&#xff09;器…

Redis+注解实现限流机制(IP、自定义等)

简介 在项目的使用过程中&#xff0c;限流的场景是很多的&#xff0c;尤其是要提供接口给外部使用的时候&#xff0c;但是自己去封装的话&#xff0c;相对比较耗时。 本方式可以使用默认&#xff08;方法&#xff09;&#xff0c;ip、自定义参数进行限流&#xff0c;根据时间…

仿闲鱼的二手交易小程序软件开发闲置物品回收平台系统源码

市场前景 闲置物品交易软件的市场前景广阔&#xff0c;主要基于以下几个方面的因素&#xff1a; 环保意识提升&#xff1a;随着人们环保意识的增强&#xff0c;越来越多的人开始关注资源的循环利用&#xff0c;闲置物品交易因此受到了广泛的关注。消费升级与时尚节奏加快&…

FastJson读取resources下的json文件并且转成对象

读取resources下的json文件并且转成对象 json文件路径是: ​​ ‍ 读取代码 ‍ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import lombok.extern.slf4j.Slf4j; import org.apache.commons.…

深圳龙岗戴尔dell r730xd服务器故障维修

深圳龙岗一台DELL POWEREDGE R730XD服务器系统故障问题处理&#xff1a; 1&#xff1a;客户工厂年底产线整改&#xff0c;时不时的会意外断电&#xff0c;导致服务器也频繁停机&#xff0c; 2&#xff1a;多次异常停机后导致服务器开机后windows server系统无法正常启动了&…

绕组识别标签规范

有标签名称的要标记&#xff0c;没有的不用标记 需要标注的工具、器材 图像中文名称标签名称od脱模剂watering can2铁铲shovel1记号笔&#xff0c;白色着重标bluepen/whitepen6纸质标签label3钢尺scale5玻璃纤维带&#xff08;卷&#xff09;红色网格布red grid4白色网格布wh…