内存类型

Python2和3字符编码的区别

蹲街弑〆低调 提交于 2019-11-26 10:13:10
Python2和3字符编码的区别 一.字符编码应用之Pyhton 1.1执行Python程序的三个阶段 test.py文件内容以gbk格式保存的,内容为: 阶段一:启动Python解释器 阶段二:Python解释器此时就是一个文本编辑器,负责打开文件test.py,即从硬盘中读取test.py的内容到内存中 此时,Python解释器会读取test.py的第一行内容, #coding:utf-8 或 #-*-coding:utf-8-*- ,以此决定以什么编码格式将代码读入内存,这一行就是设定Python解释器这个软件使用的编码格式。 可以用sys.getdefaultencoding()查看,如果不在Python文件指定头信息 #-*-coding:utf-8-*- ,那就使用Python默认的编码格式。 import sys sys.getdefaultencoding() 'utf-8' Python2中默认使用ascii,Python3中默认使用utf-8。 改正:在test.py指定文件头,字符编码一定要为gbk。即更正为 #coding:gbk 你好啊 阶段三:读取已经加载到内存的代码(Unicode编码格式),然后执行,执行过程中可能会开辟新的内存空间,比如name="nick" 内存的编码使用Unicode,不代表内存中全都是Unicode,因为在程序执行之前

2019 08 08 字符编码,文件操作

若如初见. 提交于 2019-11-26 07:29:51
字符编码 一、计算机基础 cpu: 控制程序的运行(从内存中取出文本编辑器的数据读入内存) 内存: 运行程序(经cpu操作后,内存中含有文本编辑器的数据) 硬盘: 存储数据(文本编辑器) 二、文本编辑器存取文件的原理 ​ 计算机只认识 0和1 ​ 文本编辑器的作用: 读写数据,保存数据 打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失。 要想永久保存,需要点击保存按钮:编辑器把内存的数据刷到了硬盘上。 在我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是在编写一堆字符而已。 三、Python解释器执行py文件的原理 ​ 具有文本编辑器的功能 ​ 010101011001010 --> a = 1 # 5个很普通的字符 ,python解释器没有运行的时 候提供的 # 字符编码 ​ 定义变量就要开辟内存空间存放变量,内存只认识 0和1 也就是说, a=1 --> 01010110101 需要一定的0和1表示他为字符串,python解释器运行的时候提供 的 # python2和3字符编码的区别 第一阶段:Python解释器启动,此时就相当于启动了一个文本编辑器 第二阶段:Python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中(小复习:pyhon的解释性

4c语言数据类型和变量

孤街醉人 提交于 2019-11-26 02:37:12
2.1数据类型知多少 对于类型所占的内存是多大,可以使用sizeof()测试。 空类型:普通变量没有这个类型,指针类型有这个类型 数据类型的本质是:固定内存大小的别名。 2.2基本类型 int main() { int a;//告诉编译器分配4个字节 int b[10];//告诉编译器分配4*10个字节 //类型的本质是固定内存块大小的别名 //同过sizeof()测试具体分配多大的内存空间 printf("sizeof(a)=%d sizeof(b)=%d\n",sizeof(a),sizeof(b)); return 0; } 运行结果: //打印数组b的地址 printf("b=%d &b=%d",&b,b); 运行结果: //数组加1 printf("b=%d &b=%d\n",b+1,&b+1); 地址一样,为什么+1后就不一样了那? //是数组首元素地址,一个元素4个字节,加一就是在原地址上加4个字节 //&b是整个数组的首地址,一个数组是4*40=40个字节,加1就是加了40 //测一下指针变量的内存大小是多少 //指针长度是:32位系统,指针长度都是4 // 64位系统,指针长度都是8 char *p; printf("sizeof(p)=%d\n",sizeof (p)); double ***q; printf("sizeof(q)=%d\n",sizeof

C语言

旧街凉风 提交于 2019-11-26 02:31:56
一、编译链接过程 编译 预处理 删除注释,宏替换,头文件展开,条件编译 编译 词法分析,语法分析,语义分析,符号汇总(生成汇编代码) 汇编 将形成的汇编代码转为二进制代码,形成对应的符号表 链接 合并段表以及符号表的重定位 二、指针和数组 数组和指针的区别和联系 联系 表达式中的数组名就是指针 C语言中把数组下标作为指针的偏移量 ==作为函数参数的数组名等同于指针== 区别 数组名在传参时会退化为指针,指针不会(所以一定不要在函数内部对传参后的数组名进行sizeof大小) 内存中数组是一块连续开辟的空间,指针只占一个指针类型的大小空间(32位为4字节,64位为8字节) 数组可以通过下标直接进行访问,指针需要进行计算间接访问 数组名具有常属性,不能进行++,--操作;指针可以 数组指针和指针数组区别 以 int (*p)[n] 为例,从右往左理解,() 高优先级,先定义一个指针,然后看[],说明这是一个指向数组的指针,最后 int 型。 数组指针(int (*p)[n]) 代表一个指向有n个int类型的数组的指针,也叫行指针 指针数组(int *p[n]) 代表一个有n个int* 指针的数组 区别:数组指针由于是一个指针,所以内存中只消耗一个指针大小的空间;指针数组是一个数组,消耗n个对应类型指针大小的空间。 需要注意的点 sizeof字符串指针大小为对应平台下指针大小

C语言查漏补缺

非 Y 不嫁゛ 提交于 2019-11-26 02:30:33
1.C99中struct的柔性数组 // C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员, // 但结构中的柔性数组成员前面必须至少一个其他成员。 // 柔性数组成员允许结构中包含一个大小可变的数组。 // sizeof 返回的这种结构大小不包括柔性数组的内存。 typedef struct st_type { int i; int a[]; // int a[0]; }type_a; // type_a 为 typede f定义的 结构体 st_type 的别名,方便使用 // 定义一个可变长的结构体,用 sizeof(type_a)得到的只有 4,就是 sizeof(i)=sizeof(int)。 // 给结构体分配内存 type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int)); // 为结构体指针 p 分配了一块内存。用 p->a[n]就能简单地访问可变长元素。 // 我们再用 sizeof(*p)测试结构体的大小,发现仍然为 4。 // 在定义这个结构体的时候,模子的大小就已经确定不包含柔性数组的内存大小。 // 柔性数组只是编外人员,不占结构体的编制。 // 用 free 函数来释放内存: // free(p); 2. 利用共用体测试机器大小端 int checkDuan( ) {

gopl 底层编程(unsafe包)

筅森魡賤 提交于 2019-11-25 23:22:25
包 unsafe 广泛使用在和操作系统交互的低级包中, 例如 runtime、os、syscall、net 等,但是普通程序是不需要使用它的。 unsafe.Sizeof、Alignof 和 Offsetof 函数 unsafe.Sizeof 报告传递给它的参数在内存中占用的字节(Byte)长度(1Byte=8bit,1个字节是8位),参数可以是任意类型的表达式,但它不会对表达式进行求值。对 Sizeof 的调用会返回一个 uintptr 类型的常量表达式,所以返回的结果可以作为数组类型的长度大小,或者用作计算其他的常量: fmt.Println(unsafe.Sizeof(float64(0))) // "8" fmt.Println(unsafe.Sizeof(uint8(0))) // "1" 函数 Sizeof 仅报告每个数据结构固定部分的内存占用的字节长度。以字符串为例,报告的只是字符串对应的指针的字节长度,而不是字符串内容的长度: func main() { var x string x = "a" fmt.Println(unsafe.Sizeof(x), len(x)) // "16 1" var s []string for i := 0; i < 10000; i++ { s = append(s, "Hello") } x = strings.Join(s,