内存类型

goѧϰday2

匿名 (未验证) 提交于 2019-12-03 00:34:01
值类型和应用类型 1、值类型:变量直接存储值,内存通常在栈中分配   基本数据类型int、float、bool、string以及数组和struct 2、引用类型:变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配。通过GC回收。   指针、slice、map、chan等都是引用类型。 goѧϰday2 原文:https://www.cnblogs.com/xone/p/9219216.html

C++ 中的创建和删除数组(new/delete 和 new[]/delete[])

匿名 (未验证) 提交于 2019-12-03 00:26:01
C++ 中的创建和删除数组(new/delete 和 new[]/delete[]) 已有 4122 次阅读 2017-4-17 16:33 | 个人分类: C++ | 系统分类: 科研笔记 | 关键词:C++,数组,动态数组 | 数组 , 动态数组 在 C++ 中,我们也许经常使用需要建立数组和释放内存的问题,在动态分配内存的时候一般有两种方式,一个是malloc和new两种形式。 比如使用malloc的时候,一般形式如下: har *Ptr = NULL; Ptr = (char *)malloc(100 * sizeof(char)); if (NULL == Ptr) { exit (1); } gets(Ptr); free(Ptr); 在使用new的时候,一般的形式如下: 1. 删除单变量地址空间 2. 删除数组空间 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢? 如果你对这些问题都有疑问的话,不妨看看我这篇文章。 new 和 delete 到底是什么? 如果找工作的同学看一些面试的书,我相信都会遇到这样的题:sizeof 不是函数,然后举出一堆的理由来证明 sizeof 不是函数。在这里,和 sizeof 类似,new 和 delete 也不是函数,它们都是 C++ 定义的关键字,通过特定的语法可以组成表达式。和 sizeof 不同的是

zz 计算机的启动过程(详细)

匿名 (未验证) 提交于 2019-12-03 00:19:01
https://blog.csdn.net/langeldep/article/details/8788119 【转】计算机的启动 Feb 17 th , 2013 寒假回来就要开始执行新年的计划了~首先是每周的一篇blog。 今天看了 阮一峰 最新的一篇博客 计算机是如何启动的 ,感觉写得很好,又清楚又简单。虽然自己关于计算机启动这个过程从大三OS课的时候就陆陆续续地一直有了解,但是都没有一个系统的了解,或者了解了又忘了,希望通过这次记录把这点彻底弄清楚来并且记在脑子里。另外在评论中有另外一个小哥 大磊 把他的 博客 也贴出来了,写得很详细,作为阮一峰的补充吧。 以下是转来的文章,中间加上了大磊的补充,也没有区分哪句话是谁说的,具体的还是看之前提到的两篇博客吧: 零、boot的含义 先问一个问题,”启动”用英语怎么说? 回答是boot。可是,boot原来的意思是靴子,”启动”与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语: "pull oneself up by one's bootstraps" 字面意思是”拽着鞋带把自己拉起来”,这当然是不可能的事情。最早的时候,工程师们用它来比喻,计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序! 早期真的是这样,必须想尽各种办法

JVMѧϰ(һ)

匿名 (未验证) 提交于 2019-12-03 00:09:02
JVMѧϰ 1.了解jvm内存模型 在学习jvm之前,我们先对jvm有个整体的了解,下图为java虚拟机运行时数据区,这些区域都有各自的用途,以及创建和销毁时间。 程序计数器 此区域是一块较小的内存空间,主要用途就是当前线程所执行的字节码的行号指示器。本区域为线程私有的内存,在执行native方法时,这个计数器的值为Undefined,这个区域也是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。 虚拟机栈 它的生命周期与线程相同;它描述的是java方法执行的内存模型,每个方法执行时都会创建一个栈帧用于存储方法从入栈到出栈所用到的局部变量表、操作数栈,动态链接,方法出口等。 局部变量表存放的是编译期可知的各种基本数据类型,对象引用和returnAddress类型(一条字节码指令的地址)。其中64位长度的long和double类型数据占用2个局部变量空间,其他占用一个。 本地方法栈 此区域是虚拟机使用到Native方法服务。 堆 此区域为java虚拟机所管理的内存中最大的一块。也是的有线程共享的一块区域,在虚拟机启动时创建。本区域唯一目的就是存放对象实例。 JDK1.7的堆内存模型 jdk1.7的堆内存模型分为年轻代(该区域分为三部分,Eden区和两个大小严格相同的Survivor区),老年代和永久代。 JDK1.8的堆内存模型 jdk1

golang 指针类型* ,以及 &取变量内存地址

匿名 (未验证) 提交于 2019-12-02 23:59:01
1.golang 中,指针是一种类型,指向变量所在的内存单元(不是内存地址)。申明: 在变量名前加上星号字符,比如 * age ,指向变量 age 所在的内存单元 2. & :获取变量在计算机内存中的地址, & age ,取出变量 age 所在内存地址,一般地址是十六进制。 3 : 申明指针* age , 打印指针内存单元的值 ** age .如下面 x * int , * x 就是指针所对应的值。 package mainimport ( "fmt" "reflect" ) func main (){ k := 40 fmt . Println ( k ) fmt . Println ( say ( "hello,world" , "lf" )) fmt . Println ( reflect . TypeOf ( k )) //检查变量类型 fmt.Println(&k) // 获取变量在计算机内存中的地址,可在变量名前面加上&字符。 // &k 引用的是变量k的值,值所在的内存地址 showMemoryAddress(&k) //返回的地址是相同的}func showMemoryAddress(x *int){ // *int参数类型位指向整数的指针,而不是整数 fmt.Println(*x) //本身就是指针,打印地址不需要 &这个符号,如果想使用指针指向的变量的值

C++内存管理

匿名 (未验证) 提交于 2019-12-02 23:57:01
new operator 我们平时使用的new是new操作符(new operator),就像sizeof一样是语言内置的,不能改变它的含义,功能也是一样的 比如: string * ps = new string ( "Memory Management" ); 相当于 void * memory = operator new ( sizeof ( string )); // 得到未经处理的内存,为String对象 call string :: string ( "Memory Management" ) on * memory ; // 调构造函数将字符串放到内存 string * ps = static_cast < string *>( memory ); // 使ps指针指向新的对象 new操作符总是做两件事: 1.调用相应的operator new分配内存 2.调用相应的构造函数 如下代码: class T { public : T (){ cout << "构造函数。" << endl ; } ~ T (){ cout << "析构函数。" << endl ; } void * operator new ( size_t sz ){ T * t = ( T *) malloc ( sizeof ( T )); //operator new就是简单的分配内存即可

C++ new和malloc的区别

匿名 (未验证) 提交于 2019-12-02 23:51:01
1.new关键字是C++中的一部分,malloc是由C库提供的函数; 2.new是以具体类型为单位进行内存分配,malloc只能以字节为单位进行内存分配; 3.new在申请单个类型变量时可进行初始化,malloc不具备内存初始化的特性。

python基础面试题(全网最全!)

匿名 (未验证) 提交于 2019-12-02 22:51:30
Ŀ¼ 1、为什么学习Python? 1、为什么学习Python? 人生苦短....哈哈,自己想吧!!! emmm。。。来真的 python语言的简洁、优美! 官网、网上视频、学习网站 1、python代码,简介,明确,优雅,简单易懂 2、开发效率高 3、可扩展性强 解释型:在执行程序时,计算机才一条一条的将代码解释成机器语言给计算机来执行 编译型:是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样计算机运行该程序时可以直接以机器语言来运行此程序,运行速度很快。 Cpython,IPython,Jpython,pypy,Ironpython Python是一门解释器语言,代码想运行,必须通过解释器执行,Python存在多种解释器,分别基于不同语言开发,每个解释器有不同的特点,但都能正常运行Python代码,以下是常用的五种Python解释器: CPython:当 从Python官方网站下载并安装好Python2.7后,就直接获得了一个官方版本的解 释器:Cpython,这个解释器是用C语言开发的,所以叫 CPython,在命名行下运行python, 就是启动CPython解释器,CPython是使用最广的Python解释器。 IPython:IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方 式上有所增强

.NET Core CSharp初级篇 1-1

匿名 (未验证) 提交于 2019-12-02 22:06:11
本节内容是对于C#基础类型的存储方式以及C#基础类型的理论介绍 例如以下这句话:“张三是一名程序员,今年15岁重50.3kg,他的代号是‘A’,他家的经纬度是(N30,E134)。”,这句话就是一个字符串,使用双引号括起来。而15则表示是一个 整数类型 ,50.3就是小数类型,不过我们在 C# 中通常称为 浮点类型 ,最后一个经纬度,我们通常定位地点的时候都是成对出现,所以我们认为这二者是一个密不可分的结构,这种类型我们称为 结构体类型(struct) 。 以上我所说的数据类型都是一个所含有信息量一定的数值,我们称为 值类型 ;而张三这个人,他所含有的数据大小是不固定的,比如我又了解到了张三是一个富二代,那么他就会增加一个属性是富二代,我们需要更多的空间去存储他,张三这个变量我们通常就称为引用类型,而张三这个名字,我们就称为引用,如果你对C或者C++熟悉的话,张三这个名字就是指向张三这个人(对象)的一个 指针 。 在 C# 中,数据在内存中的存储方式主要分为在堆中存储和栈中存储。我们之前提到的值类型就是存储在栈中,引用类型的数据是存储在堆中,而数据是在栈中。 值类型:存储在栈(Stack,一段连续的内存块)中,存储遵循先进后出,有严格的顺序读取访问速度快,可通过地址推算访问同一个栈的其余变量。 引用类型:引用(本质上和C++中的指针一致)存储在栈中,内含的数据存储在堆中

深拷贝与浅拷贝

爷,独闯天下 提交于 2019-12-02 21:57:02
一、单层拷贝 不管深拷贝还是浅拷贝对不可变数据类型都是引用内存地址 不管深拷贝还是浅拷贝对可变数据类型都是会重新创建新的内存空间 赋值是指向同一个对象,内存地址不变 例子: 1、单层浅拷贝: 不可变类型:int、字符串、元组 a = 1 # 不可变类型 copy_a = copy.copy(a) # 单层浅拷贝 print(id(a),id(copy_a)) #内存地址相同 a = [1,2] # 可变类型 copy_a = copy.copy(a) #单层浅拷贝 print(id(a),id(copy_a))#内存地址不相同 2、单层深拷贝: a = 1 # 不可变类型 copy_a = copy.deepcopy(a) print(id(a),id(copy_a)) #内存地址相同 a = [1,2] # 可变类型 copy_a = copy.deepcopy(a) print(id(a),id(copy_a))#内存地址不相同 3、赋值: l1 = [1,2,3,4] 可变类型 l2 = l1 print(id(l1),id(l2)) # 内存地址相同 s1 = 'a' 不可变类型 s2 = s1 print(id(s1),id(s2)) # 内存地址相同 二、嵌套拷贝 总结: 浅拷贝: 外层是不可变类型、不管内层是否可变都是引用拷贝 外层是可变类型