1.局部变量 在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。 普通局部变量存储于进程栈空间,使用完毕会立即释放。 静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会 ...
分类:
其他好文 时间:
2021-06-24 17:55:50
阅读次数:
0
一、单继承情况 1.虚函数表、指向虚函数表的指针以及类型信息: ①为了实现多态,我们需要知道一个指针或引用的真实类型以及其所调用函数实例的位置。所以编译器会创建一个虚函数表,里面存放类的类型和类函数的实例地址,并且在类内存中加入一个指向虚函数表的指针vptr。(为什么不放到类中?导致类的内存不固定, ...
分类:
其他好文 时间:
2021-06-24 17:50:51
阅读次数:
0
目的 搞清楚一此比较特殊的C代码对应的汇编语言是什么。 在实际机器中的表现形式是什么样的。 方法 通过查看编译器生成的汇编代码 调试时查看反汇编代码 常用操作 将常量装入REG 将内存里数据装入REG 将REG里数据装入内存 练习 将简单的C赋值语句转为汇编代码 内存地址计算 内存寻址实例 栈操作 ...
分类:
其他好文 时间:
2021-06-23 17:18:44
阅读次数:
0
6.22Java多线程happenbefore 编译器和CPU会尝试重排指令使得代码更快地运行 发生情况: 代码间没有直接联系,没有依赖 这样就会发生指令重排a 步骤 拿到指令,进行编译,放入寄存器 >fetch 解码指令,从寄存器中拿值,从主存拷贝到工作内存 >copy 执行选项 >excutor ...
分类:
移动开发 时间:
2021-06-23 17:01:24
阅读次数:
0
内存模型的基础 内存模型的抽象结构 共享变量 堆里面的对象、数组元素,静态变量(方法区) 局部变量 不会有线程可见性的问题,不会受内存模型的影响 指令重排 编译器优化的重排序 不改变单线程语义的前提下重新安排编译的顺序 --编译器 指令级并?的重排序 现在的处理器采用的技术,多条指令重叠进行,只要两 ...
分类:
其他好文 时间:
2021-06-23 16:42:19
阅读次数:
0
问题抛出:静态常量(static final)可以再编译器确定字面量,但常量(final或者String a = “a”或者Integer的 -128-127)并不一定在编译期就确定了, 也可以在运行时确定.所以Java针对某些情况制定了常量优化机制。 拓展: 为啥Integer是-128-12 如 ...
分类:
编程语言 时间:
2021-06-21 20:12:37
阅读次数:
0
什么是注释? 注释是计算机语言的一个重要组成部分,用于在源代码中解释代码的功用,增强了程序的可读性,可维护性。注释在随源代码进入预处理器或编译器处理后会被移除,不会在目标代码中保留其相关信息。 Java中注释有三种: 单行注释 // 多行注释 /* */ 文档注释 /** */ 文档注释允许你在程序 ...
分类:
编程语言 时间:
2021-06-20 18:41:43
阅读次数:
0
#define用来定义常量。 首先我们需要知道,#define会在预编译的时候,以字符串替换的形式被替换掉。假设我们#define AspectRatio= 1.635。如果AspectRatio在使用的过程中报错,编译器会直接提示1.635。如果这个宏是其他文件定义的,那么对于使用者而言,他甚至都 ...
分类:
编程语言 时间:
2021-06-20 18:21:18
阅读次数:
0
现在编译器编译类时按照如下顺序: ①类成员的声明 ②成员函数的函数体在类全部可见后开始编译 而类成员的编译顺序则按照成员在类中的声明顺序进行编译,其中类成员包括:①数据成员②成员函数③嵌套类型(nested type)④枚举成员⑤模板成员。 由于成员函数的声明包括返回类型,函数名和形参列表。所以其中 ...
分类:
其他好文 时间:
2021-06-19 19:13:40
阅读次数:
0
mutable ####理解 mutable字面意思是可变的,其实直接定义的local variable都是可变的,所以mutable对于修饰普通的local variable是没有意义的。事实上,编译器会禁止你这么做: #include <iostream> int main() { mutabl ...
分类:
其他好文 时间:
2021-06-16 18:34:32
阅读次数:
0