局部变量

【汇编】C++ 函数调用之——有参无返回调用(传值)

こ雲淡風輕ζ 提交于 2019-12-10 04:01:09
C++函数有参调用有几种传参方式: 一.传值 二.传指针(地址) 三.传引用 其中参数可被const修饰,也可以有默认值。下面分情况讨论: 为了简洁,省略main函数的汇编码而直接给出func函数的汇编码。 一.传值调用 有源代码: void func(int a,char b){ int c; c=a+b; } int main(int argc,char *argv[]) { //call func func(10,'a'); return 0; } 下面看看汇编码: 调用发生时: //call func func(10,'a'); //进行参数压栈操作,首先是'a'压入栈,然后是10压栈,然后call跳转表,再由调转表call函数 00F1141E push 61h 00F11420 push 0Ah 00F11422 call 00F1113B //函数调用完成后,栈减小8字节,两个dword,因为CPU对栈的操作都是双字操作,这里两个参数就是两个双字 00F11427 add esp,8 具体内存中的表现是这样的(先让func把栈初始化): 显然不在func的stack内,注意两个参数前面还有两个DWORD, 一个是00f1 1427,另一个是00dd f794;这两个DWORD的产生应该是在PUSH两个参数之后, 又有的两个PUSH, 显然,第一个PUSH 00f1

提高PHP编程效率的53个要点[转]

為{幸葍}努か 提交于 2019-12-10 03:16:59
用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。 1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。 2、$row[’id’] 的速度是$row[id]的7倍。 3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。 4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。 5、注销那些不用的变量尤其是大数组,以便释放内存。 6、尽量避免使用__get,__set,__autoload。 7、require_once()代价昂贵。 8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。 9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。 10、函数代替正则表达式完成相同功能。 11、str_replace函数比preg

类、方法、成员变量和局部变量的可用修饰符

≯℡__Kan透↙ 提交于 2019-12-09 22:58:00
1、抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。原因如下:抽象方法没有方法体,是用来被继承的,所以不能用private修饰;static修饰的方法可以通过类名来访问该方法(即该方法的方法体),抽象方法用static修饰没有意义;使用synchronized关键字是为该方法加一个锁。。而如果该关键字修饰的方法是static方法。则使用的锁就是class变量的锁。如果是修饰类方法。则用this变量锁。但是抽象类不能实例化对象,因为该方法不是在该抽象类中实现的。是在其子类实现的。所以。锁应该归其子类所有。所以。抽象方法也就不能用synchronized关键字修饰了;native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢? 2、接口是一种特殊的抽象类,接口中的方法全部是抽象方法(但其前的abstract可以省略),所以抽象类中的抽象方法不能用的访问修饰符这里也不能用。而且protected访问修饰符也不能使用,因为接口可以让所有的类去实现(非继承),不只是其子类,但是要用public去修饰。接口可以去继承一个已有的接口。

Python函数及操作

假如想象 提交于 2019-12-08 22:32:24
博文结构 自定义函数 变量作用域 Python内建函数 一.函数 Python中的函数都是语句和表达式的集合。函数的用法并没有限制,使用方式就像Python 中其他值一样,对于重复使用的代码,需要编写为自定义函数以便于重复使用。 函数可以分为无参函数和带参函数 1.无参函数 自定义无参函数并不复杂,语法格式如下: def函数名称() : 代码块 return [表达式] 案例: def add(): \\定义函数 op1=10 op2=20 rt=op1+op2 print op1,'+',op2,rt return add() \\调用函数 \\输出结果 >>> 10 + 20 30 >>> 案例:输出九九乘法表 def nineMultiTab(): op1=(1,2,3,4,5,6,7,8,9) op2=(1,2,3,4,5,6,7,8,9) for i in op1: for j in op2: print i,"*",j,"=",i*j retrun nineMultiTab() \\输出结果 >>> 1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5 1 * 6 = 6 1 * 7 = 7 1 * 8 = 8 1 * 9 = 9 2 * 1 = 2 2 * 2 = 4 ..................略 (2

Java字节码简介(Introduction to Java Bytecode)

二次信任 提交于 2019-12-08 14:11:29
本文为译文,原链接地址 Introduction to Java Bytecode ,首先感谢原文作者。 跟随本篇文章深入研究JVM内部结构和java字节码,你将会知道如何分解你的文件进行深入检查。 对于一个经验丰富的开发人员阅读java字节码也是非常枯燥的事情。首先我们要弄清楚我们为什么需要知道如此底层的东西?上周有一个能应用简单的场景:很早以前我作了代码修改,编译至jar包中并部署到服务测试一个潜在的性能问题。不幸的是修改的代码从未保存在版本控制系统,无论什么原因,本地修改的代码已消失的无影无踪。在几个月后,我再次需要原格式的修改的代码,但我已找不到了! 幸好编译后的代码还保存在服务器上,长舒一口气,我获取服务器的JAR并使用反编译工具打开。。唯一的问题:反编译工具GUI不是完美的,JAR中的许多类,只有我想反编译的那个特定类,UI打开时引起了bug,反编译器直接崩溃了! 绝望时孤注一掷,还好我属性原字节码,我宁愿再花些时间手动反编译一些代码而不去完成代码,再去测试它们。至少我还记得去哪儿查看代码,读字节码帮助我精确的找出修改的地方,把它们转换成源代码格式。 一旦你学会了字节码的语法,它可以应用到所有支持java的平台上——因为它是代码的中间的表现,不是最终通过底层cpu执行的代码。而且由于JVM结构相当的简单,字节码也比机器码简单,因此也是简化的指令集合

ASM核心API-方法

巧了我就是萌 提交于 2019-12-08 09:57:16
AMS4使用指南 实战java虚拟机 方法结构-示例 类文件如下: public class Bean { private int f; public int getF () { return f; } public void setF ( int f) { this .f = f; } } 使用 javap -verbose xx/xx/Bean ,查看字节码指令,观察方法区: 构造方法 如果程序没有显示的定义构造函、器, 编译器会自动生成一个默认的构造器 Bean(){super();} 0 : aload_0 #this 1 : invokespecial #1 // Method java/lang/Object."<init>":()V 4 : return getF()方法 Xreturn, ireturn表示int, 如果是引用类型为areturn ,void则为return; 0 : aload_0 1 : getfield #2 // Field f:I 4 : ireturn ###ireturn == return int ; setF()方法 0 : aload_0 #### this 1 : iload_1 ### 入参 f; 2 : putfield #2 // Field f:I 5 : return ###return void 抛出异常

servlet不是线程安全的

半世苍凉 提交于 2019-12-08 09:46:30
在tomcat容器中,servlet默认是单例模式;如果实现ISingleThreadModule标记接口 则针对多个请求创建多个实例(最多20个),为了实现线程安全,可以: 1.使用局部变量 而不是实例变量 2.使用synchronized关键字 综上说明静态变量、实例变量、局部变量,三者使用范围或者说生命周期越大 则越不线程安全 来源: https://www.cnblogs.com/hzq3554055/p/12004630.html

提高PHP编程效率的53个要点

泪湿孤枕 提交于 2019-12-07 20:18:54
提高PHP编程效率的53个要点 用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。 1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。 2、$row[’id’] 的速度是$row[id]的7倍。 3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。 4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。 5、注销那些不用的变量尤其是大数组,以便释放内存。 6、尽量避免使用__get,__set,__autoload。 7、require_once()代价昂贵。 8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。 9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。 10、函数代替正则表达式完成相同功能。 11、str

想让你的PHP程序跑的更快些吗?

本秂侑毒 提交于 2019-12-07 20:18:39
用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。   1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。   2、$row[’id’] 的速度是$row[id]的7倍。   3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。   4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。   5、注销那些不用的变量尤其是大数组,以便释放内存。   6、尽量避免使用__get,__set,__autoload。   7、require_once()代价昂贵。   8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。   9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。   10、函数代替正则表达式完成相同功能。   11、str

Python新手学习基础之函数-全局变量和局部变量

一笑奈何 提交于 2019-12-07 19:26:50
全局变量和局部变量 我们通常把定义在函数外的变量成为全局变量,定义在函数内的变量称为局部变量,顾名思义,全局变量的作用域是整个代码段,局部变量的作用域就只是在它所属的代码段,变量只在它的作用域里有效。 通过实例,我们可以进一步理解下,全局和局部的概念。 count = 10 #全局变量 def print_local(): count = 5 #局部变量,这个count覆盖了全局变量count,这2个是不同的变量。 print(count) def print_global(): print(count) #这里的count是最上面的全局变量噢 print_local() print_global() 结果会是? global语句 从上面课的代码中可以发现,如果在函数体内声明的变量名和已经有的全局变量名重复,那么局部变量就会把全局变量覆盖掉。如果想要在函数体内使用全局变量,使用前需要先用global语句来声明下用到的这个变量是全局变量。 count = 10 #全局变量 def print_local(): global count #声明count是全局的 count = 5 #这个count就是上面的全局变量 print(count) def print_global(): print(count) print_local() print_global() 更多学习内容