内存类型

「C」 数组、字符串、指针

三世轮回 提交于 2020-02-10 23:06:51
一、数组 (一)数组   概念:用来存储一组数据的构造数据类型   特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素。 (二)数组的定义   格式: 类型 数组名[元素个数];   举例:存储5个人的年龄   int agrs[5]; // 在内存中开辟4x5=20个字节的存储空间   可以在定义数组的同时对数组进行初始化:   int ages[5] = {17,18,19,20,21};   遍历数组:   for(int i = 0;i<5;i++)   {     printf(“ages[%d]=%d\n”,i,ages[i]);   }   注意:   (1)数组的初始化     ①. int ages[5] = {17,18,19,20,21}; // 一般写法     ②. int ages[5] = {17,18}; // 只对前两个元素赋值     ③. int ages[5] = {[3]=10,[4]=11}; // 对指定的元素赋值,这里为第三个和第四个     ④. int ages[] = {11,12,13}. // 正确,右边的元素确定,则个数可以省略这里为3个。     ⑤. int ages[]; // 错误,编译器无法知道应该分配多少的存储空间     ⑥. int ages[5];ages = {17

Amazon EC2 实例类型

拟墨画扇 提交于 2020-02-09 15:45:04
https://aws.amazon.com/cn/ec2/instance-types/ 通用 通用实例提供计算、内存和联网资源三方面的平衡,可用于各种不同的工作负载。这些实例非常适合于以相同比例使用这些资源的应用程序,如 Web 服务器和代码存储库。 A1 T3 T3a T2 M5 M5a M4 Amazon EC2 A1 实例 可以显著节省成本,非常适合广泛的 Arm 生态系统所支持的横向扩展和基于 Arm 的工作负载。A1 实例是最先采用 AWS Graviton 处理器的 EC2 实例,这些处理器配备 64 位 Arm Neoverse 内核和 AWS 设计的自定义硅片。 功能: 定制的 AWS Graviton 处理器,带有 64 位 Arm Neoverse 内核 支持高达10 Gbps 网络带宽的增强型网络 默认情况下已经过 EBS 优化 由 AWS Nitro 系统 (专用硬件和轻量级管理程序的组合)提供支持 型号 vCPU 内存 (GiB) 存储 网络性能 (Gbps) a1.medium 1 2 仅限 EBS 最高 10 a1.large 2 4 仅限 EBS 最高 10 a1.xlarge 4 8 仅限 EBS 最高 10 a1.2xlarge 8 16 仅限 EBS 最高 10 a1.4xlarge 16 32 仅限 EBS 最高 10

C# 值类型和引用类型

旧城冷巷雨未停 提交于 2020-02-08 18:36:37
类型被分为两种: 值类型(整数,bool, struct, char, 小数) 引用类型(string, 数组 ,自定义的类,内置的类) 值类型只需要一段单独的内存,用于存储实际的数据,(单独定义的时候放在栈中) 引用类型需要两段内存 第一段存储实际的数据,它总是位于堆中 第二段是一个引用,指向数据在堆中的存放位置 来源: CSDN 作者: Cuijiahao 链接: https://blog.csdn.net/cuijiahao/article/details/104225846

指针大小为什么与类型无关

情到浓时终转凉″ 提交于 2020-02-08 09:29:59
  指针的大小与硬件有关。   内存中有各种各样的数据,整型、浮点型、字符型等等。这些数据在内存中占据不同大小的储存空间,用sizeof运算符(注:sizeof是种运算符而不是函数,它在编译时发挥作用)进行运算时结果是不同的。然而不同类型的指针在相同系统环境下进行这种运算时结果却是相同的。   众所周知,C语言中的指针描述的是内存中的地址。而内存地址这种东西则是由CPU进行编址的。对于一个4位的CPU来讲,它能同时输出的数据为4位,即0000-1111共2^4 种情况,故这些二进制数字只能对应到16个位置的内存地址,即CPU仅能识别出16个内存地址。即便你的内存再大,它也显示只有16个位置的内存可用。这种原理同样应用于32位和64位的CPU。   32位的CPU能同时呈现32个位的数据,故有2^32 种情况,对应到2^32 个内存位置也就是最大3.85GB大小,因此32位的系统只能支持最大4GB的内存。相比之下,64位的CPU能同时吞吐2^64 位的数据,这显然能够对应到2^64 个内存的地址,而理论上这个大小换算成10进制则是相当大的数,如果对应到内存,此时一个很大的内存。所以我们说64位系统理论支持无穷大内存(这里的无穷大只是一种概念,因为我们不可能用到如此巨大容量的内存)。   综上,因为指针存放的是地址,所以32位内存,共4个字节;64位系统的64位地址共8个字节—

《go语言从入门到进阶实战》_徐波

痞子三分冷 提交于 2020-02-08 02:02:57
摘录 Go语言是Google公司开发的一种静态型、编译型并自带垃圾回收和并发的编程语言。 Go语言不使用虚拟机,只有运行时(runtime)提供垃圾回收和goroutine调度等。 Go语言使用自己的链接器,不依赖任何系统提供的编译器、链接器。因此编译出的可执行文件可以直接运行在几乎所有的操作系统和环境中。 从Go 1.5版本之后,Go语言实现自举,实现了使用Go语言编写Go语言编译器及所有工具链的功能。 Go语言可以利用自己的特性实现并发编译,并发编译的最小元素是包。从Go 1.9版本开始,最小并发编译元素缩小到函数,整体编译速度提高了20%。 Go语言的并发是基于goroutine,goroutine类似于线程,但并非线程。可以将goroutine理解为一种虚拟线程。Go语言运行时会参与调度goroutine,并将goroutine合理地分配到每个CPU中,最大限度地使用CPU性能。 在Go语言中,自增操作符不再是一个操作符,而是一个语句。因此,在Go语言中自增只有一种写法: i++ 如果写成前置自增“++i”,或者赋值后自增“a=i++”都将导致编译错误。 在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即便其他变量名可能是重复声明的,编译器也不会报错。 布尔型无法参与数值运算,也无法与其他类型进行转换。 切片发生越界时,运行时会报出宕机,并打出堆栈

C# 变量

只谈情不闲聊 提交于 2020-02-07 11:28:40
C# 变量 一个变量只不过是一个供程序操作的存储区的名字。在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局。范围内的值可以存储在内存中,可以对变量进行一系列操作。 我们已经讨论了各种数据类型。C# 中提供的基本的值类型大致可以分为以下几类: 类型 举例 整数类型 sbyte、byte、short、ushort、int、uint、long、ulong 和 char 浮点型 float 和 double 十进制类型 decimal 布尔类型 true 或 false 值,指定的值 空类型 可为空值的数据类型 C# 允许定义其他值类型的变量,比如 enum,也允许定义引用类型变量,比如 class。 C# 中的变量定义 C# 中变量定义的语法: < data_type > < variable_list > ; 在这里,data_type 必须是一个有效的 C# 数据类型,可以是 char、int、float、double 或其他用户自定义的数据类型。variable_list 可以由一个或多个用逗号分隔的标识符名称组成。 一些有效的变量定义如下所示: int i , j , k ; char c , ch ; float f , salary ; double d ; 可以在变量定义时进行初始化: int i = 100 ; C# 中的变量初始化

C++二维数组动态申请内存

谁都会走 提交于 2020-02-07 05:05:17
好久没用C++刷题了,今天早上刷了几条题,感觉很陌生了。怪我,大二下实在太颓废了,没啥作为。 今天更新个关于c++二维数组内存申请的问题,当初作为菜鸟初学指针的时候,还是在这方面有点搞不通的。今天用到了,顺便写下来,适当时候给C++初学者用用。 -----------C++二维数组动态申请内存-------------- 如果对new和delete不是很了解的话可以到这里来看看,http://www.cnblogs.com/hazir/p/new_and_delete.html 首先,我们一般需要用到数组的时候,都是直接声明,比如: 1 int array[3][3]; 但是,在某些情况下,数组的维数我们是不知道的,可能是等待用户输入维数,这时候需要用变量来指定维数了。可是,我们不能直接这样声明数组,因为C++不允许直接用变量作为维数声明,必须用常量,像这样就会报编译错误: 这时候就需要用new来动态申请数组了。我们一步一步来,申请一维数组的时候,我们可以这样写: int num = 3; int* array = new int[num]; 这段代码的意思就是,用new来申请num个int类型的空间,然后返回那段空间的首地址,再赋给array。可见array是一个int类型的指针,指向那段空间的首地址。语法和逻辑无误,正常运行。 但是,申请二维数组的时候

C#指针和不安全代码

大憨熊 提交于 2020-02-06 07:23:35
C#指针和不安全代码 一、引言 C#非常擅长对开发人员隐藏大部分的基本内存管理,因为它使用了垃圾回收器和引用。但是有时我们需要对一些内存进行访问那么该怎么办?我们可以用C#中的指针。 C#中也是有指针。指针的操作效率虽然高但是不安全。因为我们可以通过地址的操作来修改内存中的一些数据,而这些内存可能被别的程序使用。这样就有可能造成一定的隐患。 例如: int i =100; int* pt=&i; //将i的地址取出赋值给pt指针。 *(pt+1)=100; //将pt指针的地址加上1后,将此地址的内容赋值为100. 问题就在第三段,因为pt原先是指向i的,i是程序申请的变量空间,所有合法,但是将pt+1的执行的内存不一定是合法的,所以赋值100有可能会出现错误。 也正是因为指针的不安全性,所以在C#中不经常用指针。而是用引用来代替指针。 C#的引用其实就是一个类型安全的指针。 既然指针不安全为什么还要使用它呢? 1、向后兼容性。 许多的外部工具或其他语言编写的Dll中很多都会用到以指针作为参数来传递。为了适应这些要求,有时不得不用到指针。 2、性能 不得不说,由于指针是直接指向内存的,所以它的效率非常的高。所以在对性能、速度要求很高的场合可以考虑用指针。当然如果有更安全的解决方法,就尽量不使用指针。 二、unsafe关键字 使用指针需要注意什么? 因为指针是不安全的

Cracking Digital VLSI Verification Interview 第三章

大憨熊 提交于 2020-02-05 21:49:51
目录 Programming Basics Basic Programming Concepts Object Oriented Programming Concepts UNIX/Linux Programming in C/C++ Programming in PERL Programming Basics Basic Programming Concepts [68] 在任何一种编程语言中,静态(static)变量和自动(automatic)变量,局部(local)变量和全局(global)变量之间有什么区别? 区分这些名词需要两个概念,作用域(scope)和存储持续时间(storage duration),前者定义了在何处可以访问变量,后者定义了在何时可以访问变量。 按照变量的作用域可以区分局部(local)和全局(global)变量。局部变量的作用范围有限,尽在声明它们的代码块中可见。而全局变量在声明后在程序的任何位置都可见。 存储持续时间可以区分自动(automatic)变量和静态(static)变量。静态变量的生命周其一直持续到程序结束,因此可以始终访问。自动变量具有有限的生命周期,只能持续到程序离开定义的块或者作用域为止。 例如:在以下的systemverilog代码中,global_int被声明为类成员,并且在整个类中具有全局作用域,而当取消引用该类的对象时

python 可变类型和不可变类型

点点圈 提交于 2020-02-04 19:20:00
1. 什么是不可变类型 变量对应的值中的数据是不能被修改,如果修改就会生成一个新的值从而分配新的内存空间。 不可变类型:   数字(int,long,float)   布尔(bool)   字符串(string)   元组(tuple) 2. 什么是可变类型 变量对应的值中的数据可以被修改,但内存地址保持不变。 可变类型:   列表(list)   字典(dict) 利用id()函数 查看内存地址:   内存地址变化即不可变类型,   内存地址不变化即可变类型。 所以说常用的字符串,列表,字典这三种数据类型,字符串只能通过索引取值,不能通过索引改值;列表可以通过索引取值和改值;字典则可以通过key来取值和改值。 3. 为什么生成以上两种情况 因为python中的值是通过引用(地址值)传递的,不可变类型的值一旦被修改后会创建一个内存空间并且生成新的地址值,可变类型的值会在原内存空间中被修改。 4. 不可变类型执行过程和内存分析 5. 可变类型执行过程和内存分析 来源: https://www.cnblogs.com/hooo-1102/p/12066380.html