-
内存地址是什么?指针是什么?数据类型是什么?ASCII码是什么?
2020-01-29 21:41:23一个内存是由若干个黑色的内存颗粒构成的。每一个内存颗粒叫做一个chip。 图1.内存外形图 上面这个内存条有8个chip。每一个chip内部,是由8个bank组成的。其构造如下图: 图2.内存颗粒物理结构 在每个bank...我们来了解一下内存的物理构造,一般内存的外形图片如图1。一个内存是由若干个黑色的内存颗粒构成的。每一个内存颗粒叫做一个chip。
图1.内存外形图
上面这个内存条有8个chip。每一个chip内部,是由8个bank组成的。其构造如下图:
图2.内存颗粒物理结构
在每个bank内部,就是电容的行列矩阵结构了。(注意,二维矩阵中的一个元素一般存储着8个bit,也就是说包含了8个小电容)。
图3.bank物理结构
看完上面的图我们知道了内存是使用海量的小电容按照8个一组的方式排列出来的。
在逻辑电路中,低电平表示0,高电平表示1。一般规定低电平为0~0.25V,高电平为3.5~5V。不管是电容形式或者磁盘形式(硬盘)或者其他形式的储存器,他们的最基本存储形式实际上都只能储存真或者假两种形式。
所以内存中一个最基本储存电容(比特BIT)可以存放C语言中的一个布尔型数据(真|假),8个比特排列起来就组成了一个字节byte,一个字节可以存储一个2的8次方的数也就是256
2进制表示为:00000000 - 11111111(也就是8种不同电平状态的电容组合起来)
2进制转为10进制就是:256, 转为16进制就是FF
内存作为1个存储数据的存在, 有1个很重要的特性, 就是内存里的数据能被cpu直接访问。
虽然CPU能直接访问内存,但是也不能一个bit一个bit的查找,因为这样查找的话数据量太大了,于是CPU就按照8个一组的方式去查找内存(也就是一个字节byte),实际上内存也是按照8个bit一组的方式摆放的。
操作系统会给每一个字节(byte)的数据设置一个内存地址,在32位操作系统上他是一个32位的2进制数,最大能表达4G的数据(2的32次方个字节)的位置,在64位操作系统上他是一个64位的2进制数,能表示17亿多个G的数据位置。
C语言中的指针也就是内存地址,所以在32为操作系统c的指针占4字节,64位操作系统上占8字节。
然后CPU通过直接寻址技术去查找相关内存。
注意:内存地址只是一种寻址逻辑,并没有实体。但是C语言的指针是把操作系统返回的寻址逻辑地址给实际保存了,所以指针会占内存,不要混淆了。
了解了这些我们再来看C语言的数据类型就很容易理解了。
ASCII码就是把内存中一个字节的数规定了一个映射表,比如110000(48)代表0,1100001(97)代表A等。其实就是一个约定俗成的映射表。
unicode码也是类似的一种映射表,因为电脑只能表示和读懂2进制的数据,人类就规定了一种映射表来映射到其他的数据。
方便自己记忆而做的笔记,如果有错误恳请指出,参看文章如下:
-
为什么list输出是数组类型的字符串而数组却是内存地址?
2019-07-14 15:18:081.原因是object.java类是所有类的基类,称为父类/超类,java中所有的类都会继承该类,而该类的toString方法打印的就是内存地址. 2.list中打印的确是数组类型的字符串,原因是list类继承自下图中的AbstractList类, 该...**1.原因是object.java类是所有类的基类,称为父类/超类,java中所有的类都会继承该类,而该类的toString方法打印的就是内存地址.当System.out.println(X)的时候,实际打印的就是X.toString()方法的内容,如果X元素没有重写toString()方法那么就是内存地址值,如果重写了就是数组类型的字符串,**至于System.out.println(X)方法为什么会打印的就是X.toString()的内容,在下面以list和array做详细介绍.
2.list中打印的确是数组类型的字符串,原因是list类继承自下图中的AbstractList类,
该类又继承了AbstractCollection类,该类重写了toString方法.返回的是数组类型的字符串,如下图所示:
因此,list也继承了重写后的toString()方法.
我们再看一下System.out.println()方法,进入到println()方法发现,他打印的就是元素的toString()的内容,如下图所示:
进入上图方法中,点击valueof()方法,进入到下图中:
我们发现,其实System,out.println()方法打印的就是传入的该元素的toString()的值,在结合list中已经重写了该方法,因此打印的是数组类型的字符串.
3.数组为什么重写后还是内存地址,必须要用Ayyays.toString(数组)才能打印数组类型的字符串?
原因与list中原因是一致的,因为数组的Arrays类重写了toString()方法,而本身创建的数组没有重写toString()的方法,因此打印出来的就是内存值. -
java中==null 怎么成立? 在引用数据类型中==比较的是内存地址 null的内存地址是什么
2016-11-03 12:24:09java中==null 怎么成立? 在引用数据类型中==比较的是内存地址 null的内存地址是什么 [img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/3.gif][/img] -
c语言中首地址是什么意思_c语言变量的地址(通过变量在内存中的地址了解其本质)...
2021-01-26 21:08:58在计算机中,内存是连续的存储空间,并且对内存进行了编址,编址是连续的,地址的基本单位是字节。变量,在编译时(先编译理解这个很重要)根据它的类型给...所以该变量对应的内存地址中存入的内容即是该变量的值。c语...在计算机中,内存是连续的存储空间,并且对内存进行了编址,编址是连续的,地址的基本单位是字节。
变量,在编译时(先编译理解这个很重要)根据它的类型给它分配一定长度的内存单元。
比如:
int型变量占4个字节
double型变量占8个字节
引用一个变量时就是从该变量名对应的地址开始的若干单元取出数据
变量赋值时是将数据按照该变量定义的类型存入对应的内存单元。所以该变量对应的内存地址中存入的内容即是该变量的值。
c语言中规定,通过地址运算符&得到变量的地址。
说明:
1. 基本类型的变量,变量长度都是一定的,即变量长度是由类型决定的,而不是赋的值长度#include
int main(void){
int a = 1;
int b = 10223372036854775807;
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(b));
return 0;
}
2. 编辑器首先会对定义的变量安装类型在内存单元中数值一定长度的空间,无论是否赋值。
.....
-
java 里面int 与 Internet查看内存地址的方法是什么?
2017-06-04 08:05:32如题、。请问谁知道有啊。toString() 好像打印不出来这种基本数据类型与包装类的、 -
为什么32位的系统内存中指针类型都占用4个字节的内存呢
2021-03-02 16:35:42为什么32位的系统内存中指针类型都占用4个字节的内存呢 在学习过程中知道,一个任何类型的指针变量所占的字节大小都为4个字节。这是为什么呢? 内存是由字节组成的,每个字节都有一个编号。指针变量主要是存放相同...在学习过程中知道,一个任何类型的指针变量所占的字节大小都为4个字节。这是为什么呢?
内存是由字节组成的,每个字节都有一个编号。指针变量主要是存放相同数据类型的变量的首地址。这里的这个地址其实就是内存的某个字节的编号。而这个编号的确定是与地址总线有关。如果地址总线是32位,则它的寻址范围是0~2^32(0~4G)。所以为一个字节编址就由32个0或者1组成。例如第一个字节的编址是32个0,最后一个的编址是32个1。一个字节有8位,32位则需要4个字节。
简单的说32位的操作系统就是指:地址总线是32位的系统。那么,也就是说操作系统的位数决定了指针变量所占的字节数。
————————————————
版权声明:本文为CSDN博主「鸡啄米的时光机」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33221533/article/details/81143818 -
Java中String内存地址的问题(为什么String 的变量输出不是地址)
2020-06-03 10:18:01为什么String 的变量输出不是地址? 因为所有的类继承Object类,所以单独输出一个对象的时候,他会调用Object.toString,打印出来的...关于Java中String内存地址的问题。 在创建String类型的变量的时候建议使用直接赋值 -
C++语言--指针--3.1--什么是地址、用指针来保存内存地址、为什么使用指针、指针的常见错误
2017-01-14 16:29:41指针是用来保存内存地址的变量。 2.用指针来保存地址 2.1 指针与类型变量 从上面我们可以看到指针P1指向的a为int类型,指针P2指向的b为double类型。当我们分别把指针P1,P2分别加一时, 根据输出的结果可以... -
12.引用数据类型在内存中的存储方式:基本数据类型和引用数据类型有什么不同???
2020-06-12 11:32:431.引用数据类型在内存中的存储方式是什么? Scanner input = new Scanner(); 创建一个Scanner类型的变量,名称为input,值为Scanner对象 栈中存储的是堆中的内存地址 2.基本数据类型和引用数据类型的不同? (1).声明... -
内存和地址
2019-05-15 00:28:28什么是地址,地址就是内存编号。 什么是内存,就是便于访问的存储空间。 内存为什么是4g?因为32根地址总线的cpu支持2的32次方寻址。 即有4g个字节。每个字节8位。因此一个int是32位需要4个字节来表示。一个char8位... -
java引用类型是什么_java引用类型是什么
2021-02-28 06:42:41java引用类型是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。引用类型和原始类型... -
C语言-内存映射(大文件处理)(创建文件映射内核对象然后在映射到内存地址空间中,当作无类型指针使用)
2020-02-29 19:20:23C语言-内存映射是什么,根据自己粗浅的学习理解,总结为——创建一个文件映射内核对象然,然后在把文件映射内核对象映射到内存地址空间中,然后我们拿这个内存地址(也就是无类型类型指针)对内存空间(也就相当与... -
什么是动态内存分配
2020-09-27 09:17:38**动态内存分配** 我们需要知道的是:创建和处理在程序执行的...函数malloc以请求分配的字节数为实参,返回一个指向分配到的内存空间的首地址、类型为void的指针(即指向void的指针)。还有就是:类型为void的指... -
一道题解读“类型强转”在内存中发生了什么
2016-06-12 00:26:56以补码二进制存储,方便起见,化为16进制 要想弄懂,必须知道元素在计算机内存是咋存储的,也就是内存影像图类型强转就是对所能读取内存单元的改变,指类在内存作用是,地址单元的映射长度 short a = 1 ... -
python 入门之 – 深度copy 与 数据类型内存地址(十四)
2018-11-18 22:02:17在深入了解 python 的 copy() 方法之前先回顾以前以前学过的变量赋值,如: a = 123123 b = a print(b) 毫无疑问,在变量中我可以直接...id() 方法使用来查看 变量 在计算机中真实的 内存地址 的一个方法,如: a ... -
内存地址对齐
2009-08-15 23:06:00内存地址对齐2008/05/21 12:46什么是对齐,以及为什么要对齐:现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的... -
C# 变量申请内存地址
2019-04-24 19:46:21说到C#内存地址的问题就不得不说几个概念: 1.值类型和引用类型: 值类型和引用类型变量是很基础的问题,简单点来说常用的int,bool,float等就是C#中的值类型变量,而Interface、Class等均为引用类型变量。 那么值... -
Python的变量内存地址和C/C++的变量内存地址
2019-01-19 22:16:52突然想到Python的可变类型和不可变类型,在复习数据结构与算法时,用的C++,想看一下两种语言的变量地址有什么不同 在Python中,可以发现不可变类型,比如int类型,元组,当给变量赋值不同的值时,变量的地址会变化... -
==判断地址相同为什么基本类型可以比较内容
2020-08-05 17:38:03实际是地址分配问题。(==永远是比较地址) 基本类型都是存在栈里面的,...但是对于其他类型,都是存在堆里面的动态分配内存,所以每一次新建一个数据都会动态分配一个内存地址,所以的时候,当然内存地址是不一样的。 -
C语言内存地址对齐详解
2012-08-06 16:04:59现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上... -
C++中什么是内存对齐?
2018-12-21 00:42:00平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常 2.硬件原因:经过内存对齐之后,CPU的内存访问速度大大提升。具体... -
(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址) equals() : 它的作用也是判断两个
2021-01-03 17:17:58String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的 a、可变性:String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。StringBuilder与StringBuffer都... -
什么是动态数据类型
2016-07-02 13:02:45动态数据类型 ...//函数id() 的作用是查看变量指向的内存地址。见help(id) //内存中分配两个单元,存放数字12和13。 //x,y分别指向内存地址,类似C语言的指针 x=12 y=13 print 'x=',x,id(x) print 'y= -
聚合类型内存分布说明
2018-06-10 18:37:291、平台原因:(移植原因)不是所有的硬件平台都能访问任意地址上的任意数据,某些平台上只能在某些地址处取特定类型的数据,否则,抛出硬件异常 2、性能问题:数据结构(尤其是栈),应该,尽可能的在自然边界上... -
简单类型与复杂类型的概述、堆和栈、简单类型与复杂类型的内存分配以及简单类型与复杂类型的传参)
2020-05-22 12:12:06简单类型与复杂类型 简单类型有叫做基本数据类型或值类型;复杂类型又叫做引用类型。 值类型:简单数据类型/基本数据...引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型 -
void*是什么类型的指针_为什么要有指针和引用类型?
2021-01-26 05:40:50也就是说对象位于内存的某个地址中,如果我们知道对象的地址和类型,就能访问它……翻译自 Bjarne Stroustrup 《The C++ Programming Language》(Fourth Edition),Chapter 7.在学习 C 与 C++ 语言时,指针与引用... -
内容补充:列表在内存中如何存储的?什么是浅拷贝?什么是深拷贝?
2020-12-23 14:37:24浅拷贝是把原列表第一层的内存地址拷贝给了新列表。如果原列表存的都是不可变数据类型,那不会出现问题;但是如果原列表包括可变数据类型,那就会出现问题,因为可变数据类型的内存两个列表是共享的。 要想copy得到... -
说说基本数据类型和复杂数据类型特点是什么?
2019-06-02 10:03:00说说基本数据类型和复杂数据类型特点是什么? 基本数据类型 变量名在栈上存储的是具体的数值 使用“==”是判断值是否相等 复杂数据类型 变量名栈上存储的是对象的[内存地址],内容存储在堆上面 使用“==”是判断...
-
BNUZ计科一班作业第七题,负数进制
-
基于微信的同城小程序、校园二手交易小程序 毕业设计毕设源码使用教程
-
PD协议 协议层
-
【毕设】jsp+基于JB的人事管理系统(源代码+论文)
-
2014年重庆理工大学《操作系统原理及应用》两套期末考试试卷.pdf
-
QT编程思想【C++,基于QT 6】
-
必得科技首次公开发行股票招股说明书.pdf
-
朱老师鸿蒙系列课程第1期-3.鸿蒙系统Harmonyos源码配置和管理
-
MySQL 高可用工具 heartbeat 实战部署详解
-
【C++】迭代器
-
12.2 布尔函数的表示
-
转行做IT-第15章 Collection、泛型、Iterator
-
安装ui库antd
-
CentOS7安装Python3环境(无需修复yum命令)
-
MySQL 事务和锁
-
2014年重庆理工大学《数据库原理及应用》两套期末考试试卷.pdf
-
树莓派自启动
-
树莓派使用pwm控制风扇
-
学军 20210302 测试 解题报告
-
JAVA01