汉邦问答 / 问答 / 问答详情

Linux系统中x86跟x64的区别是什么

2023-06-08 07:59:36
余辉

Linux操作系统中x64和x86的区别如下:

一、寄存器分配的不同

64位有16个寄存器,32位只有8个,32位前8个都有不同的命名,分别是e_,而64位前8个使用r代替e,即r_;

32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi、rsi、rdx、rcx、r8、r9作为第1-6个参数,rax作为返回值;

64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用;

二、函数调用的不同

x_64的参数通过寄存器传递,callq在栈里存放一个8位的返回地址;

许多函数不再有栈帧,只有无法将所有本地变量放在寄存器里的才会在栈上分配空间;

一些寄存器被设计成为被调用者-存储的寄存器,这些必须在需要改变他们值的时候存储他们并且之后恢复他们。

三、参数传递的不同

6个寄存器用来传递参数;

剩下的寄存器按照之前的方式传递(不过是与rsp相关了,ebp不再作为栈帧指针,并且从rsp开始第7个参数,rsp+8开始第8个,以此类推);

调用时,rsp向下移动8位(存入返回地址),寄存器参数无影响,第7个及之后的参数现在则是从rsp+8开始第7个,rsp+16开始第8个,以此类推;

四、栈帧的不同

很多情况下不再需要栈帧,比如在没有调用别的函数,且寄存器足以存储参数,那么就只需要存储返回地址即可,需要栈帧的情况:

a. 本地变量太多,寄存器不够;

b. 一些本地变量是数组或结构体;

c. 函数使用了取地址操作符来计算一个本地变量的地址;

d. 函数必须用栈传送一些参数给另外一个函数;

e. 函数需要保存一些由被调用者存储的寄存器的状态(以便于恢复)

五、运算速度的不同

64位cpu的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据,比32位提高了一倍,理论上性能会相应提升1倍。

什么是本地变量?

在java里,变量的作用域可以简单理解为从它的声明处开始,到包围它的{}结束,未声明,就不能使用,声明之后,即使在它包含的{}里也可以使用。java的基本单位是类,类是一类事物的抽象,是有属性的,这个属性就是成员变量,比如人类,可以把肤色、姓名、性别、身高、体重等属性作为变量保存,这样,一个具体的人类出现了,我们可以通过这些属性把他与其他人类区分开来。本地变量出现在方法中,在方法中定义,在方法中使用,超出方法就不存在,所以叫本地变量。Ex:public class Human { private String name; private String sex; public String getName() { return name; } public void sayHello() { String words = " says: Hello!"; System.out.println(name + words); }}这里name、sex就是成员变量,words就是本地变量。
2023-06-08 04:34:031

python什么是本地变量什么是全局变量

本地变量在函数内赋值的变量,只能在函数内使用全局变量不在函数内赋值的变量,出现后可以在任何地方使用,也可以在任意位置使用global将变量声明为全局变量
2023-06-08 04:34:101

本地变量,私有变量和公共变量的区别?

局部变量是只在定义该变量的过程中有效,其它过程中无效,用local命令定义。私有变量在使用的过程及下级调用的过程有效,直接赋值的变量,不需要定义。全部变量在所有过程中都有效,用public定义。您所说的本地变量也许就是局部变量吧,书上一般不是这么叙述的。
2023-06-08 04:34:172

python中的本地变量(local variable)和全局变量(global variable)分别是什么?

全局变量能在局部使用,但是在局部声明的变量不能在外部(比如循环外部)使用
2023-06-08 04:34:241

c语言 什么叫本地变量不会被默认初始化,参数会?

位于全局区的变量叫做全局变量,位于函数中的变量叫做局部变量。全局变量有默认值0,局部变量没有默认值,使用前必须初始化。int a, b; //全局变量a和b,有默认值0int main(){int a; //局部变量a,没有默认值a = a+1; //错误,没有初始化a就使用了a的值}
2023-06-08 04:34:331

shell的环境变量,本地变量,位置变量有什么区别 ???想请教,详细点

环境变量:全局变量,所有shell脚本可见。本地变量:普通变量,当前脚本可见,对引用该脚本的脚本也可见。位置变量:用于处理命令行传递给shell脚本的参数,比如test.sh脚本,用命令“sh test.sh 1 2 3”执行该脚本,则位置变量$1指代1,$2指代2,$3指代4,$0指代脚本名称test.sh。希望对你有用。
2023-06-08 04:34:411

求VFP大神告诉我局部变量,私有变量和本地变量的区别啊

局部变量是只在定义该变量的过程中有效,其它过程中无效,用local命令定义。私有变量在使用的过程及下级调用的过程有效,直接赋值的变量,不需要定义。全部变量在所有过程中都有效,用public定义。您所说的本地变量也许就是局部变量吧,书上一般不是这么叙述的。
2023-06-08 04:34:481

C# 本地变量

什么叫本地变量?
2023-06-08 04:34:553

JAVA线程本地变量ThreadLocal和私有变量的区别

ThreadLocal变量 作用域是各自线程内部。私有变量作用域 属于该类的实例。所以, ThreadLocal变量 只用于线程内部共享,是线程安全的。私有变量线程不安全,例如,利用一个Runnable实例启动2个线程,这2个线程就可以共同拥有 私有变量。
2023-06-08 04:35:011

android如何从本地变量存储在全局变量

在某些时候我们需要将extjs的onready函数中的一些参数带出来,但是在这个匿名函数中并不是那么的容易将变量带出来,需要注意的是var myView=nullwindow.setView=function(view){myView=view;}在<script></script>里面的第一行,下面才是EXT加载的方法还有最好写成window["setView"]=function(view){}这样view变量就被带出到全局变量myView中;
2023-06-08 04:35:292

c#...请问下这个l.n是本地变量..还是局部变量还是类字段?

类变量,即是类属性~~~~~~~~~~~~~~~~~~~~~~~~~~
2023-06-08 04:35:376

keil编译中未引用本地变量怎么解决

带有__root属性的函数或者变量,只要包含(include)他们的模块,无论是否被引用,编译器都不会优化,都将保留到目标代码中。示例:__root const u32 temp @0x9F00 = 0x12345678;11注意:const表示的是常量类型,将temp这个只读变量保存到flash中,@0x9F00则代表的是flash的地址。KEIL:attribute((used))__attribute__((used)) //不知道为什么,文章不显示"__",有大佬知道的说一声11示例:const uint32_t temp __attribute__((used)) __attribute__((at(0x9F00))) = 0x12345678;11注意:上面的示例中去掉__attribute__((used)),即使未引用变量,ARMCC编译器也可以把temp变量编译进去目标文件。
2023-06-08 04:35:501

什么事位置变量?shell的变量类型有哪些种?

你可以在百度搜索"shell变量之辨",是我的技术博客.里面列出了shell变量的各种使用方法
2023-06-08 04:35:584

java 自变量 局部变量

建议你不要死扣这些概念要多看程序,这些概念都不是关键性的多练习才是提高水平的关键
2023-06-08 04:36:133

Paracraft中,变量与全局变量的定义?

本地变量的作用范围只限当前代码方块,即使多个代码方块共用一个电影方块,每个代码方块的本地变量作用范围也只是单个代码方块(如图中第1处所示)。全局变量的作用范围是整个世界的代码方块,在某个代码方块中定义了全局变量并执行该代码方块后,在整个世界中创建的代码方块中都能看到该全局变量并使用。
2023-06-08 04:36:201

JAVA中Annotation是什么,有什么用

请输入你Annotation提供了一条与程序元素关联任何或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。这些被存储在annotation的“name=value”结构对中。annotation类型是一种接口,能够通过反射API的方式提供对其的访问。 annotation能被用来为某个程序元素(类、方法、成员变量等)关联任何的。需要注意的是,这里存在着一个基本的潜规则:annotaion不能影响程序代码的执行,无论增加、删除annotation,代码都始终如一的执行。另外,尽管一些annotation通过java的反射api方法在运行时被访问,而java语言解释器在工作时忽略了这些annotation。正是由于忽略了annotation,导致了annotation类型在代码中是“不起作用”的;只有通过某种配套的工具才会对annotation类型中的进行访问和处理。本文中将涵盖标准的annotation和meta-annotation类型,陪伴这些annotation类型的工具是java编译器(当然要以某种特殊的方式处理它们)。 由于上述原因,annotation在使用时十分简便。一个本地变量可以被一个以NonNull命名的annotation类型所标注,来作为对这个本地变量不能被赋予null值的断言。而我们可以编写与之配套的一个annotation代码,使用它来对具有前面变量的代码进行解析,并且尝试验证这个断言。当然这些代码并不必自己编写。在JDK安装后,在JDK/bin目录中可以找到名为“apt”的工具,它提供了处理annotation的框架:它启动后扫描源代码中的annotation,并调用我们定义好的annotation处理器完成我们所要完成的工作(比如验证前面例子中的断言)。说到这里,annotation的强大功能似乎可以替代XDoclet这类的工具了,随着我们的深入,大家会更加坚信这一点的答案... 拿别人的,希望可以帮到你~
2023-06-08 04:36:291

x86与x64的区别

实际上X86架构是基础架构,X64架构是基于X86的,也可称为X86-64架构。所以只是称呼上不一样,一般人叫X86架构,有64位和32位之分,
2023-06-08 04:36:362

windows32位系统main函数内的三个本地变量所在的内存区域称为什么

int main( int argc, char *argv[], char *envp[] )三个参数:argc表示有多少个命令行参数,第一个就是执行程序名,所以argc最少为1。argv是具体的参数。envp是系统的环境变量,很少有介绍的。“名称=值”的形式,以NULL结束。可以测试一下:int main( int argc, char *argv[], char *envp[] ){for ( int i = 0; i < argc; ++i ){printf( "%d : %s ", i, argv[ i ] );}for( int i = 0; envp[i] != NULL; ++i ) {printf( "%d : %s ", i, envp[ i ] );}return 0;}
2023-06-08 04:36:441

Python错误:在赋值之前引用了本地变量?

def fun():[4空格]global cp......# 定义全局变量
2023-06-08 04:37:021

三菱plc用modbusrtu协议读取从站1的40001地址怎么写?

要使用Modbus RTU协议读取三菱PLC从站1的40001地址,需要按照以下步骤进行编程:配置串口通信参数,例如波特率、数据位、校验位和停止位等。构建Modbus RTU协议的读取命令,命令格式为:从站地址(1字节) + 功能码(1字节) + 起始地址(2字节) + 寄存器数量(2字节) + CRC校验(2字节)其中,从站地址为1,功能码为03,起始地址为40001,寄存器数量为1,CRC校验为命令中除CRC字段以外的所有字节的CRC16校验值。将命令通过串口发送给PLC,等待PLC响应。解析PLC返回的响应数据,从中获取所需数据。注意事项:在编程过程中应注意Modbus RTU协议的数据格式,如字节顺序和数据类型等。在发送命令和解析响应数据时,应注意处理异常响应,例如非法功能码或地址等。FX系列PLC的程序段:MC:MODBUS_RECEIVE_COMMANDLD X0 ; 设置从站地址STL $W8 ; 将从站地址存入D8000LD 8 ; 设置寄存器数量STL $W10 ; 将寄存器数量存入D8002LD 40001 ; 设置起始地址STL $W12 ; 将起始地址存入D8004LD 3 ; 设置读取命令功能码STL $W14 ; 将功能码存入D8006CALL "MODBUS_RECEIVE" ; 调用MODBUS_RECEIVE指令MOV $W16,D8100 ; 将D8100-D8105寄存器的值拷贝到D2000-D2005中MOV $W18,D8102 ; 将D8102-D8105寄存器的值拷贝到D2006-D2009中RETMC:MODBUS_RECEIVELOCAL STR[8] ; 定义本地变量STL $W10 ; 将寄存器数量存入本地变量STL $W12 ; 将起始地址存入本地变量STL $W14 ; 将功能码存入本地变量MOV 4,STR[0] ; 设置串口号,根据实际情况修改MOV 9600,STR[1] ; 设置波特率MOV 0,STR[2] ; 设置数据位MOV 0,STR[3] ; 设置校验位MOV 0,STR[4] ; 设置停止位MOV 500,STR[5] ; 设置超时时间(单位:ms)MOV 16,STR[6] ; 设置每个数据位所需时间(单位:us)MOV 100,STR[7] ; 设置读写等待时间(单位:ms)MOVE STR,D2000 ; 将本地变量的值拷贝到D2000-D2007中CALL "MODBUS_RECEIVE" ; 调用MODBUS_RECEIVE指令RETQ系列PLC的程序段:MC:MODBUS_RECEIVE_COMMANDMOV 100,D8040 ; 设置串口号,根据实际情况修改MOV 9600,D8041 ; 设置波特率MOV 0,D8042 ; 设置数据位MOV 0,D8043 ; 设置校验位MOV 0,D8044 ; 设置停止位MOV 500,D8045 ; 设置超时时间(单位:ms)MOV 16,D8046 ; 设置每个数据位所需时间(单位:us)MOV 100,D8047 ; 设置读写等待时间(单位:ms)MOV 8,D8010 ;MOV 1,D8012 ; 设置从站地址MOV 3,D8013 ; 设置读取命令功能码MOV 40001,D8014 ; 设置起始地址MOV 8,D8016 ; 设置寄存器数量CALL "MODRD" ; 调用MODRD指令MOV #D8020,D110 ; 将读取结果拷贝到D8020-D8027中RETMODRD指令需要在程序中先定义,具体定义方法可参考GX Works2的帮助文档。需要注意的是,上述代码中的串口号、波特率等参数需要根据实际情况进行修改,且不同型号的三菱PLC编程语言略有不同。建议在编写程序前先查看相应的编程手册和帮助文档。
2023-06-08 04:37:091

ALLEGRO怎么更改本地环境变量

应该在setup -> user preferrences 里面吧, 或者使用命令: enved
2023-06-08 04:37:161

网页打印时出来脚本错误,求高手帮忙解决~~谢谢

点否就行
2023-06-08 04:37:233

红警2地图编辑器怎么给计时器加上名称。

题主你好,不知道一年半之后你还会不会回来看这个问题- -触发编辑器设置事件(任何事件就行)之后,在行为里选择【103 计时器文本...】,在参数值里选择文本就行了。不过可以有几个计时器同时存在?这一点我还没有解决- -抱歉
2023-06-08 04:37:313

三菱plc中var_ln_out必须是同一数据吗?

在三菱PLC中,VAR_LN_OUT是一个指令,它用于将多个本地变量的数据传输到一个缓冲区中。这些本地变量可以由不同的数据类型(比如,整数、浮点数等)和不同的地址表示。因此VAR_LN_OUT指令并不要求这些变量具有相同的数据类型,也可以位于不同的内存地址上。当然,在使用VAR_LN_OUT指令时,需要注意以下几点:1. 所有变量的大小之和不能超过缓冲区的大小;2. 要确保每个变量位于正确的内存地址上;3. 如果需要将字符串复制到缓冲区中,则需要使用STRCPY指令而不是VAR_LN_OUT指令。综上所述,VAR_LN_OUT指令传输的多个本地变量可以拥有不同数据类型和内存地址,但需要满足以上几点要求。
2023-06-08 04:37:441

linux中的shell变量的种类及各种类的用处是什么?

2.1.1 本地变量定义:是在用户现在的shell生命期的脚本中使用;例:[redhat@server redhat]$name="Red Hat Linux" #把变量设置为Red Hat Linux[redhat@server redhat]$echo ${name} or #显示变量内容=[redhat@server redhat]$echo $name #等同上面的语意Red Hat Linux #显示其设定内容,[redhat@server redhat]$set | grep "name" #查看刚才所设定的内容,或不加"grep "name""查看用户自己所有的本地变量,[redhat@server redhat]$readonly name #把name这个变量设置为只读变量,不允许再次设置,这可参考变量定义;-_-![redhat@server redhat]$name="He SenLin" #重新赋值bash:name:readonly variable #只读文件系统[redhat@server redhat]$readonly #查看系统存在的只读文件附:重新登录一下系统,再次用[redhat@server redhat]$echo ${name} #本地变量就不存在了,说明本地变量只能存活在用户shell的生命周期中,重登录就不在了,2.1.2 环境变量定义:环境变量用于所有用户进程<通称为子进程>,包括编辑器,脚本和应用,登录进程为父进程,shell中执行的用户进程均为子进程,不像本地变量只用于现在的shell.存在目录在所有用户的主目录下<即/home>/.bash_profile或如何设置环境变量?第一种方法就是编辑上面的二个文件,还可以用"export"进行设定或更改;这可不像本地变量只需 name="Red Hat Linux"那样简单,但却可以把本地变量更改为环境变量;只须在本地变量结束后,输入:export <变量名>;例,我们把name由本地变量修改为环境变量,我们可以这样做;[root@server root]#name="Red Hat Linux" #本地变量[root@server root]#export name #变量name由本地升为环境当然也可以用下面这种方法;[root@server root]#export name="Red Hat Linux" #直接定义name为环境变量;定义后,可通过env进行查看,不知道上面的本地环境变量由哪个命令进行查看你记住了没有?,演示一下查看现在定义的环境变量;[root@server root]#env | grep "name"Red Hat Linux同样不加后面grep "name",这个参数也是查看所有的环境变量;更同样的是我们也可以运行readonly这个参数给name以只读属性;Tips:环境变量就是全部包含在本地变量中<因为它即可运行中父进程中也可运行于子进程中>,注意一点,本地变量不能运行在全部进程中,只有环境变量可以,再不懂就联想一下人与自然吧;-_-!还是不会?用绝招:[root@server root]#you=myfriend #设置本地变量name为myfriend[root@server root]#echo ${you} #查看一下是否成功myfriend #成功[root@server root]#sh #更换shell环境等同重登录,这相当一个sh-2.05b#echo $you #用户子进程#没显示,说明不存在,真的不存在?sh-2.05b#exit #返回bash环境[root@server root]#echo $you #再次查看;myfriend #又出来了,怎么回事?[root@server root]#export you #把变量you设为环境变量;[root@server root]#sh #再试一次;sh-2.05b#echo $you myfriend #ok,you see?再不懂,,你就把我杀了吧,,什么,你不知道我住在哪?汗-_-! 再补充一点,就是在sh进程中设置环境变量是可以写回bash环境中,因为bash是父进程,只有老的才有小的,小的怎么才能有老的哩?<长大了就有老的喽,哦,也对!..乱语>2.1.3 变量替换定义:用变量的值替换它的名字.查看方式:echo <通用本地,环境...>可以用echo显示可以单个变量的取值;[root@server root]#str="this is example" #设置本地变量[root@server root]#echo "can you see `echo $str`" #显示cat you see this is example #替换就到这了,不明白明再来变量替换续除了上面的这个方式以外还有五种哦;别急,一个一个来;-_-!<先说好,偶不是皮条>格式 定义${variable name} 显示实际值到variable name 1${variable name :+value} 如果设置了variable name,就把value显示, 未设置则为空; 2${variable name:-value} 如果设置了variable name,就显示它,未设置就显示value<仅显不存本地中>>; 3${variable name:?value} 未设置提示用户错误信息value; 4${variable name:=value} 如未设置就把value设置并显示<写入本地中>, 5变量清除:unset <变量name>[root@server root]#echo $name #变量 name是否存在?Red Hat Linux #存在[root@server root]#unset name #清除name变量 [root@server root]#echo $name #是否成功#成功注意:如果用readonly限制了只读属性就会失败,还有怎么从环境变量中去掉那个变量呢?还记的用哪个设定环境变量的吗?对.export,只须在它后面加"-n"参数即可2.1.4 位置变量定义:位置变量表示$0,$1,$2,....$9$0 $1 $2 $3 $4脚本名 A B C D向脚本中使用位置参数;向系统命令传递参数;例:./test<在程序中进行替换>[root@server root]#vi /test #创建并编辑/test文件#!/bin/bash#testecho "这是脚本的第一个名称: $0"echo "这是脚本的第二个位置参数: $1"echo "这是脚本的第三个位置参数: $2"echo "这是脚本的第四个位置参数: $3"echo "这是脚本的第五个位置参数: $4"[root@server root]#chmod u+x ./test #加执行权限;[root@server root]#./test A B C #加参数证验echo "这是脚本的第一个名称: ./test echo "这是脚本的第二个位置参数: Aecho "这是脚本的第三个位置参数: Becho "这是脚本的第四个位置参数: Cecho "这是脚本的第五个位置参数: <向系统命令中传递位置参数>[root@server root]#vi test1.sh #新建一个脚本文件#!/bin/bash#name:test1.sh#to call: test1.sh 755 #使用方式find ~ -perm $1 -print$2 #系统命令[root@server root]#chmod u+c test1.sh[root@server root]#./test1.sh 755 date #位置一为755,2位date/dev/ip/dev/iput...Fri May 13 2:31:54 CST 20062.1.5 标准变量:bash默认建立一些环境变量就是标准变量,可以通俗的说就是不是你加的而是装好机子带的那些环境变量, 可在/etc/profile中进行定义,命令 意义HOME 用户主目录IFS 默认分隔符MAIL 邮箱地址 MAILCHECK 邮箱检查间隔PWD 用户当前工作目录LOGNAME 当前用户登录名2.1.6 特殊变量命令 意义$# 传递到脚本的参数列表$? 前个命令执行情况,0成功,其它值失败$$ 脚本运行的当前进程号$! 运行脚本最后一个命令$* 显示脚本全部参数2.1.7 影响变量的命令declare 设置或显示变量-f 只显示函数名-r 创建只读变量-x 创建转出变量-i 创建整数变量使用"+"代替"-",可以颠倒选项的意思,-r除外,export 用于传递给子shell的变量-- 表明选项结束,所有后续参数都是实参,-f 表明在"名-值"对中的名字是函数名,-n 把全局变量转换成局部变量,换句话就是不再传给shell -p 显示全局变量列表,shift用于移动位置变量,调整位置变量,使$3的值赋给$2.$2的值赋予$1.[root@server root]#vi /test #!/bin/bash #testecho "这是脚本的第一个名称: $0"echo "这是脚本的第二个位置参数: $1"echo "这是脚本的第三个位置参数: $2"echo "这是脚本的第四个位置参数: $3"echo "这是脚本的第五个位置参数: $4"shiftecho "这是脚本的第二个位置参数: $1" echo "这是脚本的第三个位置参数: $2"[root@server root]#chmod u+x ./test[root@server root]#./test A B Cecho "这是脚本的第一个名称: ./test echo "这是脚本的第二个位置参数: Aecho "这是脚本的第三个位置参数: Becho "这是脚本的第四个位置参数: Cecho "这是脚本的第五个位置参数: $4"shift #显示的时候并没有,加在此只会明了echo "这是脚本的第二个位置参数: B echo "这是脚本的第三个位置参数: C给shfit加一个数试一下:[root@server root]#vi ./test#!/bin/bash #testecho "这是脚本的第一个名称: $0"echo "这是脚本的第二个位置参数: $1"echo "这是脚本的第三个位置参数: $2"echo "这是脚本的第四个位置参数: $3"echo "这是脚本的第五个位置参数: $4"shift 2echo "这是脚本的第二个位置参数: $1" echo "这是脚本的第三个位置参数: $2"[root@server root]#./test A B C Decho "这是脚本的第一个名称: ./test echo "这是脚本的第二个位置参数: Aecho "这是脚本的第三个位置参数: Becho "这是脚本的第四个位置参数: Cecho "这是脚本的第五个位置参数: Dshift 2 #显示的时候并没有,加在此只会明了echo "这是脚本的第二个位置参数: C echo "这是脚本的第三个位置参数: D第二节 引号2.1 引号的必要性2.2 双引号有什么作用2.3 单引号的作用2.4 反引号的作用2.5 反斜杠的作用
2023-06-08 04:37:531

红色警戒 2尤里的复仇地图编辑器使用说明

红色警戒2单人任务编辑基础教程 本人水平有限,还请各位高手指点,谢谢! Zbjacky 05.11 本教程使用的是FinalAlert2YR尤里的复仇汉化压缩版。 下载地址:http://zbjacky.home4u.china.com 一、系统要求: 操作系统 Windows 95, 98, 2000, ME, Windows XP 内存 64 MB + 150 MB 交换文件 软件 Red Alert 2 原版已经安装 二、软件界面:(下面的介绍里加下划线的是最基本要掌握的,斜体是某一项的具体介绍) 1、 工具栏和菜单 (1) 文件里包括: 新建,打开,保存,另存为,地图检测,运行红色警戒,打开的地图文件记录,退出。 新建: 分单人任务地图和多人地图,多人地图就是联机地图,本教程不讨论(其实主要就是后面会讲到的地图编辑的技巧问题0。单人任务地图,下一步分建立一张全新地图和导入已存在的地图或图片。 全新地图里设置地图宽度和高度,以及战场类型(草地、雪地、公路),起始地表高度。再向下选择玩家所属方。 导入已存在的地图时可以选择是否导入树木、单位/建筑、覆盖物。 (2) 编辑里包括: 撤消,重做,复制,复制整张地图,粘贴,居中粘贴,地图参数,基本设置,特定标识,灯光,单人任务设置,所属方,局部变量,触发编辑器,标签编辑器,脚本,特遣部队,作战小队,AI触发编辑,AI触发有效,INI编辑器。 A、地图参数: 地图尺寸的修改,如果你对开始时地图的大小不满意,就可以在这里设置。 可见区域,格式是左、上、宽、高,可以设置游戏时玩家看到的区域。 B、基本设置: 主要是其中的 无偿雷达 选项,选择YES后,游戏者不需要雷达即可拥有雷达显示。 C、灯光: 严格说来应该是叫光线,一般只需要修改 正常 里的参数,修改后就可以使地图有早晨、下午、黄昏、晚上的区别了。具体修改的参数见下表。 温和: 早晨 下午 黄昏 晚上 环境照明 0.750000 1.000000 0.750000 0.350000 红 1.090000 1.080000 0.710000 0.510000 绿 0.800000 0.940000 0.810000 0.460000 蓝 0.490000 0.680000 1.190000 1.410000 雪地: 环境照明 0.750000 1.000000 0.750000 0.550000 红 1.120000 0.990000 1.060000 0.760000 绿 0.800000 1.040000 1.070000 0.740000 E、局部变量: 一般用于设置某个建筑或人物 、坦克、飞机等等(地图上已有的)被摧毁后发生某事件。具体用法见下面的例子。 要求是作战实验室被摧毁后任务失败。 第1步:加入一个新的变量 触发事件:创建一个失败条件,作战实验室被敌人摧毁。 在编辑菜单下,选择“局部变量”。加入一个新的变量“0”以及“SYS Destoryed”的描述(描述的名字可以任意),把初始值设为“0”既是无。 第2步:建立触发事件 建立一个带有一下参数的触发事件: a. 名字:“SYS Destoryed” ( 名字可以任意) b. 事件:“48被任何事物摧毁”。 c. 动作: -“56局部设置”,参数“o SYS Destroyed,0"。 第3步:建立胜利条件 建立带有以下参数的胜利条件: a. 名字:“Win” ( 名字可以任意) b. 事件: - "36 局部设置开始", 参数 "0 SYS Destroyed,0" c. 动作: - "67宣告胜利"。 F、触发编辑器: 在上面的例子里我们已经说到了触发。一个完整的触发由Trigger options、 Events 和 Actions三部分组成。通俗来说就是当游戏满足Events中设置的条件时就可以使Actions里设置的动作运行。 其中在Trigger options里可以设置触发的名称、所属参战方(触发属于哪个国家)、类型(0为标准,只执行一次;1为重复,会根据Events条件多次触发,直到该触发被其他触发禁止)、关联触发(该触发由哪个触发引起)、禁止(开始时该触发不能被运行,知道被其他出发激活允许,方可在Events条件满足时触发)、简单中等困难(默认时全选,即:运行红色警戒的新游戏时,选择了一定的难度会有相应难度的触发) 在Events里当前事件(当有多个事件时选择要操作的事件)、事件选项(有从0到57个不同的事件,具体用法在下面会有详细的介绍)、事件参数和参数值(不同的事件会有不同的设置,具体视事件再定) 在 Actions里有当前行为(有多个行为时选择要操作的行为)、行为选项(有从0到129个行为,同样在下面专门介绍)、行为参数和参数值(同上段里的事件参数和参数值) 下面有关事件和动作的介绍,有很多我也没有用过,对于这些我只能引用官方和非官方的解释了。 (1) Events事件:(常用的) 1进入事件。 一般同单元标记合用,具体在单元标记里已经介绍过了,在此不再重复。 2侦察开始。 发现一个间谍进入附上触发的建筑。. 3 偷窃行动... 发现一个间谍进入指定的参战方。. 4 被游戏者发现。 附上触发的的物体被玩加发现。 5 作战方被发现... 指定参战方的任何单位被玩家发现。 6受到任意作战方攻击。附上触发的的物体被攻击。事件和盟军的间接攻击不算。 7被任意作战方摧毁。 附上触发的的物体被摧毁。事件和盟军的间接攻击不算。 8 任何事件。 直接触发! 9被摧毁,单位,全部… 即:被摧毁所有建筑、大兵、坦克等,不包括俘虏的平民。 10被摧毁,建筑,全部… 即:被摧毁所有指定方的建筑,不包括占领的中立建筑。 11被摧毁,全部… 即:被摧毁所有建筑、大兵、坦克等,不包括占领的中立建筑和俘虏的平民。 12 荣誉胜过... (其实该翻译为金钱超过吧)资金超过参数值所指的数值。 13流逝时间 使用最广泛的事件。即:经过…时间后发生某动作。 14任务时间已到 同记时动作合用,具体例子会在后面提到。 15 被摧毁,建筑,(数量为 #)... 指定的参战方摧毁一定数量的建筑。 16 被摧毁,单位,(数量为 #)... 指定的参战方摧毁一定数量的单位。 17 不再有战车工厂。 指定的参战方没有战车工厂。 18平民撤离。 平民从地图上撤退 19建造特定类型的建筑... 触发的所属参战方建造了一个指定的建筑。 20生产特定类型的单位... 触发的所属参战方生产了一个指定的单位。 21 生产步兵类单位... 触发的所属参战方建造了一个指定的步兵。 22 生产飞行类单位... 触发的所属参战方建造了一个指定的飞行器。 23离开地图(小队)... 指定的小队从地图上撤退。队伍被摧毁不触发。 24 进入某区域... 指定参战方进入和触发关联的区域。 25 越过水平线... 一个参战方进入指定的水平线。触发器必须同一定的单元标记关联。 26 越过垂直线... 同25类似。 27 全局设置开始... 非局部变量开启。 28 全局设置清除.. 非局部变量关闭。 29 在任何情况下被摧毁 [不包括渗透] 同触发关联的物体被毁。而不是渗透。 30电力不足 指定方电力不足时触发。 34到达路径点附近 触发的所属参战方到达指定路径点是触发。 35 敌人进入局部照明区... 下面有13项选择。 36局部设置开始 37局部设置清除 同动作里的56局部设置 57局部清除前后合用。基本用法已经在前面的局部变量里说了,这里不重复。 38 首次受损(仅指战斗) 第一个在战斗时被损坏。 39 一半生命值(仅指战斗) 只有一半的生命。 40四分之一生命值(仅指战斗) 只有四分之一的生命。 41首次受损(任何来源) 第一个被损坏。 42一半生命值(任何来源) 只有一半的生命。 43四分之一生命值(任何来源) 只有四分之一的生命。 44受到攻击(作战方)... 被指定的房子攻击 45环境照明 <= ... 当环境照明亮度低于某一确定值时,事件触发。可用值介于 0 到 100之间。 46环境照明 >= ... 当环境照明亮度超过某一确定值时,事件触发。可用值介于 0 到 100之间。 47流逝的情节时间... 从剧情开始计算游戏的流逝时间。 48被任何事物摧毁 同7被任意作战方摧毁的区别是间接或友军开火造成被毁在此事件里也包括在内。 49关联对象拾的木箱。同触发关联的单位拾的木箱。 50任何单位拾的木箱 木箱箱像被任何东西捡起 51随机延时... 随机延迟指定的时间 52 荣誉值低于.. 资金低于指定数值 53 间谍伪装进入... 间谍伪装指定参战方。 (2) Actions行为动作: 1胜利者是… 2失败者是… 设置游戏结束时的胜利和失败。 3生产开始 所指的国家开始生产。 4建立小队 前面我们说到的作战小队,在这里就可以调用使之运行指定的脚本,但是小队成员是已经存在于地图上的。 5摧毁小队 同4的作用相反。摧毁特定类型的小队。小队的成员将做为新兵加入其他小队中。 6全部搜索 军队全部单位,(归属于特定的,作战方)进入搜索模式。他们将搜索并消灭敌人。 7援军(小队)建立一个特定的援军小队。小队成员将由本行为建立。 8降落区闪动(路径点) 在特定的路径点显示一个闪动的降落区域。此区域附近的地图也将会显示。 9卖掉全部建筑 指定方变卖所有建筑。一般很少用。 10播放影片… 显示特定的影片(全屏幕)。游戏在此期间将会暂停,在播放完成后自动恢复正常。 12摧毁触发事件 摧毁所有特定触发事件类型的当前实例。不会影响未来的触发实例(包括正在建立中的)。 11文本触发事件 可以调用显示ra2.csf或 ra2md.csf里相应文本,显示在游戏中屏幕的左上角。一般用于游戏中间的文本显示, 13自动生产开始 所指的国家开始自动生产。一般系统会自动将本动作和3生产开始加在游戏初始各个参战方的触发中。 14更改所属 同拥有此动作的触发相关联建筑或大兵或坦克等变为该行为动作参数里所指的参战国家。 15允许胜利 清除一个“障碍”后允许游戏者胜利。障碍的数量等于已建立而拥有此行为的触发数。 16显示全部地图 但是有裂缝产生器的地方不会被显示。 17显示路径点周围区域 显示指定路径点周围一定大小的区域。 18显示路径点的单元区域… 显示全部与特定路径点共享相同区域的单元。该行为会产生一些附带效应,使用时要谨慎! 19播放声音… 播放特定的音效。 20播放音乐… 播放特定的音乐曲目。 21播放语音… 播放特定的语音。 22强制触发事件 不管事件标记的指示,强制激活所有特定类型的触发 23记时开始 24记时停止 25记时延伸… 按特定的时间延续全局任务计时器。 26记时缩短… 按特定的时间缩短全局任务计时器。但特定的时间值不能小于零。 27记时设置 参数值为要记的时间长度,同上面的23记时开始一起使用。当时间到时有14任务时间已到这个事件的触发就被触发运行。 28全局设置 设置全局标记。全局标记被命名于 Globals.INI 文件中。全局标记可以是[ON/SET/TRUE]或[OFF/CLEAR/FALSE]。 29全局清除…清除全局标记。全局标记被命名于 Globals.INI 文件中。全局标记可以是[ON/SET/TRUE]或[OFF/CLEAR/FALSE]。 30自动建设基地 初始化计算机遭遇战模式的建设控制,可以是[ON]或[OFF]状态。当设为[ON],时,在遭遇战模式中计算机将接管控制(要确保有建造厂)。 31逐单元延伸黑幕 一步一步(按单元)增大地图的黑幕(不可见)区域。 32摧毁关联建筑 摧毁该触发关联的所有建筑, 桥梁, 或单位。 33添加一次特定的武器… 为拥有此触发的参战方添加一次(只一次)特定的武器(按指示)。 34重复添加特定的武器.. 为拥有此触发的参战方添加永久的武器(按指示)。 35首选目标… 指定拥有此触发的参战方特定武器攻击时的首选目标。 36全部更改所属… 触发所属方变为该行为动作参数里所指的参战国家。 37结盟 触发所属方同参数值所属方结盟。需要注意的是不能间接结盟,即:美国同苏联结盟,美国再同法国结盟,但苏联没有同法国结盟。 38成为敌人 同37结盟相对应。 39更改视野等级…更改游戏者雷达图的视野等级。使用 1 为超常视野, 2 为缩小视野。 40调整游戏者视野… 分别设置上下右左。同编辑菜单里地图参数的可见区域设置合用。具体用法见下面例子: 地图的可见部分是玩家可以看见和移动到的地方。许多地图在贯穿整个任务的过程中都在改变此——为了确保玩家在某一时刻完成一个任务。一个如此的任务便是盟军在欧洲的任务(第5关),那你你要毁灭核弹发射井。此任务开始只有一半的地图可见,然后展开以包含新的目标。在此指南中,我们会尝试仅仅显示顶部的一半。 第1步:理解地图尺寸 在编辑菜单下,选择地图。有一个可编辑的文本框在中间。这是地图的可见部分,在地图窗口中使用蓝线表示。顶端的文本框显示了实际可编辑的地图尺寸。在地图窗口中用红线表示。按顺序,尺寸为: a. 可见地图左界 b. 可见地图上界 c. 地图剩余部分宽度 d. 地图剩余部分高度 e. 格式:“左界,上界,宽度,高度” 第2步:设置高度,宽度和边界 在第2个文本框中,键入以下: a. 把左界设为0(你可以到达离左边最近的地方) b. 把上界设为4。不要把上界设为小于4,否则图像错误会出现。 c. 在顶端的文本框中找到宽度。把可见宽度设为理想的值。 d. 在顶端的文本框中找到高度。把可见宽度设为地图1/2。精确的计算中间没有必要,你估计便可。 现在可见左界在极左边,右界在极右边,上界尽可能的靠近地图顶部,并且只有地图的一半可见。 如果你想要在游戏过程中把任何地图可见部分改为仅仅为地图的下半部: 第1步:新建一个触发事件 此手册假设玩家使用一个本地变量“5 ResizeMap”来触发地图大小改变。在编辑菜单下,打开触发事件编辑器。创建一个带有一下属性的触发事件: a. 名字: "Resize Map 1" b. 重复: 否 c. 事件: "36-局部设置开始", 参数"5 ResizeMap,0" d. 动作: "40 调整游戏者视野", 参数: - 上界 = [把地图分为2半 (地图中央)] - 左界 = 0 - 右界 = [地图宽] - 下界 = [把地图高度分为2半 (在加入上界时和加入下半部分相同)] 41播放动画在… 在特定的单元播放特定的动画。 42爆炸在… 使用特定的弹头,在特定的单元, 产生一个爆炸。 46禁止用户输入 47允许用户输入 两者前后照应使用,用来使游戏在游戏者不干扰的情况下运行一些东东。 48移动并居中视野 移动视野到参数指定的路径点,速度有1234四个等级,1最慢,4最快。 49放大视野 放大战术视野。 50缩小视野 缩小战术视野。 51重置黑幕(未探测区域) 遮蔽全部地图 52更改照明状态 更改某建筑的局部照明方式。此触发与某一可生产局部照明的建筑相关联。 53允许目标触发 当一个触发在Trigger options里被设置为禁止,或被其他触发禁止后,使用这个动作,可以激活参数值所指的触发。 54禁止目标触发 作用同上边相反。53和54常可用于由一个触发引起另一个触发,或禁止、停止另一个触发,使用极广泛! 55建立雷达事件 在特定的路径点建立雷达事件。参数值为0是红色、1是蓝色、2是黄色 56局部设置 57局部清除 前面已经说过,这里不重复。 58流星雨在… 在特定的路径点建立显示一个流星雨事件。参数值阵雨定为7时效果最好 60变卖关联建筑 同拥有此动作的触发相关联的建筑可以被变卖。 61关闭关联建筑 关闭与此触发关联的建筑。 62启动关联建筑 启动与此触发关联的建筑。 63给予100损伤在… 给予参数指定路径点100点损伤。常在桥上下放路径点,在使用此动作,来造成桥的坍塌。 64闪光(较小)… 65闪光(中等)… 66闪光(较大)… 在特定区域显示一个相对的闪光。 67宣告胜利 68宣告失败 作用同1、2 69强制结束 强制结束游戏任务。 70摧毁标记… 摧毁标记和所有关联的触发。 71设置环境步幅… 设置环境亮度淡入步幅值。 72设置环境速率… 设置环境亮度淡入速率。 73设置环境亮度… 用新的环境亮度等级淡入替代原亮度。 74 AI触发开始 启动特定参战方的 AI 触发。 75 AI触发停止… 停止特定参战方的 AI 触发。 76 AI触发小队比例 AI 进行 AI 触发小队建造的比例 (100 = 全部 AI 触发小队, 0 = 全部正规小队)。 77飞行作战小队比例 AI 进行飞行小队建造的比例(100 = 全部小队, 0 = 全部随机)。 78步兵作战小队比例 AI 进行步兵小队建造的比例(100 = 全部小队, 0 = 全部随机)。 79作战小队单位比例… AI 进行小队单位建造的比例(100 = 全部小队, 0 = 全部随机)。 80援军(作战小队)[在路径点]… 同作战小队合用,用来在参数指定的路径点创造小队。使用极广泛! 81自我唤醒 唤醒所有休息或无指令单位进行防卫模式。 82唤醒所有休息单位 唤醒所有休息的单位模式。 83唤醒所有无指令单位 唤醒所有无指令的单位模式。 84成立作战小队 将所有单位成立为特定的作战小组。 85脉矿生长… 控制矿脉是否生长。 86矿石生长… 控制矿石是否生长。 87冰层延伸… 控制结冰面积是否增长。 88粒子动画 美国任务第五关开始时,地面升起黑烟,直升机飞来,放下谭雅和间谍,这里的黑烟就是粒子动画。我们只要会用7 TestSmoke 就可以了,也可以制造同第五关一样的场景。当然也可以试试其它的动画都是什么效果。 89删除粒子动画 同88对应。 90闪电打击… 单个的离子风暴闪电打击。 91 Go Berzerk Attached object (cyborg) goes berzerk. 95核弹打击… 102闪电风暴打击… 超级武器打击参数指定的路径点。 97 Toggle Train Cargo Toggles state of cargo train dropping crate. 98 播入音效(随机)... 在随机的路径点播放音效。 99 播放音效... 在特定的路径点播放特定的音效。 100 播放开场影片... 显示特定的开场影片(在小屏幕)。游戏者仍能对步兵和单位进行控制。 101 重置黑幕(未探测区)... 用黑幕覆盖特定的路径点。 103记时器文本 同前面的23、24、27记时合用,类似与11文本触发时间,但显示在游戏中的右下角。 104闪亮小队 让指定的小队闪光,以引起游戏者的注意。 105 显示对话注释框... 在单位的上面显示对话注释框。 106 设置科技等级(Techno)[Level]... 设置特定的科技到特定的等级。 107超时空传送友军 用法同80。 108 建立小木箱... 在特定的路径点建立一个特定内容的工具木箱。你应该清楚什么内容是游戏所支持的。 宝箱代码一览: 0=MONEY Gives chunk of cash 金钱 1=UNIT Random unit 随机单位(可在rules.ini中设置) 2=HEALBASE Heals all objects 修复所有建筑和部队 3=CLOAK OBSOLETE - makes object submarine (old cloak effect) 旧的隐形效果(仅仅是效果,没有实际意义) 4=EXPLOSION Explodes 爆炸 5=NAPALM Fire death (infantry only) 人员灭亡 6=SQUAD OBSOLETE - gives player money instead, effect unknown although some logicis attached 金钱(少一些) 7=DARKNESS Shrouds entire map 黑暗,用迷雾遮掩整个地图 8=REVEAL Reveals entire map 显示整个地图 9=ARMOR Upgrade to Armor 护甲加强 10=SPEED Upgrade to Speed 速度加快 11=FIREPOWER Upgrade to Firepower 攻击力加强 12=ICBM One-time Nuke 一次核弹使用权 13=INVULNERABILITY OBSOLETE 旧的不受伤害效果(没用) 14=VETERAN Promote to veteran 等级提升 15=IONSTORM OBSOLETE 旧的离子风暴(没用) 16=GAS Trigger firing of [GAS] warhead 气体弹头攻击(有一定伤害值) 17=TIBERIUM Random amount of Ore 随机矿藏 18=POD OBSOLETE 109铁幕作用于.. 可用来保护建筑。 110 游戏暂停(秒)... 使游戏暂停特定的秒数。 111 驱逐占据者 本行为将会从城市关联的建筑中驱逐占据的作战单位。 112 移动并居中当前视野到路径点... 立即将战术视野移动到特定的路径点。 113欢呼 用于游戏结束时胜利的一方。 114 设置制表位到(0-3)... 强制使工具条移动到特定的制表位。 115 闪动视野 在画面中闪动该类型和长度的作战视野。 116 音乐停止于... 在特定的开始使用播放声音触发的路径点停止播放所有音乐。 117 播放开场影片(游戏暂停)... 显示特定的游戏开场影片。影片播放时,游戏暂停。播放影片期间游戏者不可进行操作。 118 清除全部污染 将从地图上删除所有污染对象。 119 将特定作战方全部摧毁... 消灭特定作战方的所有建筑、单位等。 120 将特定方建筑全部摧毁... 摧毁特定作战方的所有建筑。 121 将特定方陆军单位全部摧毁... 消灭特定作战方的所有陆军单位。 122 将特定方海军单位全部摧毁... 消灭特定作战方的所有海军单位。 123 心灵控制基地... 此触发的所有者将会通过心灵控制敌方基地。 124 解除基地的心灵控制... 此触发的所有者将重新取得被敌方心灵控制的所有建筑的作战控制权。 125 将建筑建于... 此触发的所有者将在本路径点获得该类型的建筑。该建筑区域的覆盖图将全被清除,单位被冲击。 126 恢复至游戏初始科技状态... 此作战方游戏初始的所有建筑和单位将会重建。会引起单位冲击和覆盖图被清除。 127 超时空事件效果 ... 将会用多帧画面全屏幕平铺显示超时空事件效果。比如:尤里的复仇里的第一关任务的超失空效果。 G、脚本:设置特遣部队的动作,比如:空降后先攻击敌人基地,再摧毁兵营等等。具体见下面。 常用的脚本:(注意:这里添加的新脚本不会被显示在当前窗口,默认的是你建立的第一个脚本) Attack…攻击敌人的某项东东。参数有9项,常用2—Buildings即攻击敌人建筑。 Attack Waypoint攻击路径点。 Move to Waypoint移动到路径点。 Guard area (timer ticks)…等待…段时间。 Jump to line #...跳到第…项行为循环。 Unload…展开或卸下,常同Load to Transport前后合用,用来用运兵船、多功能步兵车等运输大兵或坦克等。 Load to Transport装载到运兵船、多功能步兵车等可装载车辆或船只。 Patrol to Waypoint…巡逻到…路径点。常同Jump to line #...合用,来造成循环巡逻。 Panic 对于没有武器的平民是哀叫(就是苏联第一个任务里的平民哀叫效果),有武器的平民和大兵是蹲下或趴下。一般在后面加个Jump to line #...参数为1。 Change house….改变所属 Set local… 和Clear local…分别是设置局部变量和清除局部变量。 Iron Curtain Me铁幕装置保护我。需要等到铁幕装置充能完毕,可以使用时。 H、特遣部队:用来添加执行某一使命的部队。具体用法见下面例子。 单击顶部的 添加 按钮。缺省名字为“New task forces”。把名字改为“5 GI”(可以改为任何可以描述军队的东西)。单击左边的 添加,在中央列表中缺省项目为“1 美国大兵 ”。在列表框底部的单位类型,你可以选择任意一种你想要的单位。单位数量则可以设置你要几个这种单位,比如5个。然后,关闭Taskforces窗口。(之后还需要设置好相应的脚本,然后在作战小队里设置特遣部队和脚本的组合,具体见下)。 I、作战小队:如果已经作好了特遣部队和相应的脚本,就可以把他们组合起来,成为在触发编辑器里可以触发的作战小队了。 小队类型(通过新建来建立,多个小队时可以选择相应的小队),选定的小队类型里有名称(即小队的名字,可任意,但要有代表性)、经验等级(有1、2、3三等,分别对应不同的等级)、参战方(即小队属于哪个国家)、科技等级(有从0到10几等,一般不用)、脚本和特遣部队(分别是小队执行怎样的动作和选择小队的成员)、标签(即该小队同哪个触发联系)、优先权、分组、路径点、传送路径点和最多一般不怎么用。 特遣部队、作战小队和脚本的联合使用举例: 让大兵坐在运兵船中进入地图 第一步:设定两个路径点,一个是运兵船出来的地点0,放在地图边界外面;另一个是士兵下船的地点1。(也可以设为其他的ID) 第二步:创建一个特遣部队,名称为xiaodui1,由五个大兵和一艘运兵船组成。 第三步:编辑脚本,名为xiaodui1,设四个行为,第一个是Move to Waypoint,参数是1。?/ca>
2023-06-08 04:38:002

VFP里面的变量问题,急

变量的作用域分为全局,局部,本地三种,分别以关键字Public,Private,Local来定义 1、全局变量是指在所有程序模块中都有效的内存变量,全局变量在程序或过程结束后不会自动释放,若清除它必须使用RELEASE命令. 2、局部变量是指在建立它的程序模块以及被此程序模块调用的程序模块中有效的内存变量.局部变量一旦离开定义它们的程序,就将失去意义.在程序中没有被说明为全局的内存变量,都被看成是局部变量.局部变量也可以用PRIVATE来说明 3、用Local定义的本地内存变量只能在定义它的程序中存在,一旦定义它的程序运行完毕,本地变量就会从内存中释放
2023-06-08 04:38:191

五、MYSQL存储过程和函数

u2022 create procedure用来创建 存储过程 ,create function用来创建 函数 u2022 Delimiter命令是改变语句的结束符 ,MySQL默认的结束符为;号,由于procedure和function中的;号并不代表创建的结束,所以要替换成另外的结束符以便表示创建的结束 u2022 rontine_body子句可以包含一个简单的SQL语句,也可以包含多个SQL语句, 通过begin…end将这多个SQL语句 包含在一起 u2022 MySQL存储过程和函数中也可以包含类似create和drop等DDL语句 u2022 comment子句用来写入对存储过程和函数的注释 u2022 Language子句用来表示此存储过程和函数的创建语言 u2022 存储过程和函数被标注为deterministic表明当输入相同的参数是会返回相同的结果,反之如果是not deterministic则表示相同参数不会是相同结果,默认是not deterministic u2022 相关属性短语只有咨询含义,并不是强制性的约束 u2022 Drop procedure/function语句用来 删除指定名称的存储过程或函数 u2022 Begin…end语句通常出现在存储过程、函数和触发器中,其中 可以包含一个或多个语句 ,每个语句用;号隔开 u2022 标签label可以加在begin…end语句以及loop, repeat和while语句 u2022 语句中通过iterate和leave来控制流程,iterate表示返回指定标签位置,leave表示跳出标签 u2022 Declare语句通常用来声明本地变量、游标、条件或者handler u2022 Declare语句只允许出现在begin … end语句中而且必须出现在第一行 u2022 Declare的顺序也有要求,通常是先声明本地变量,再是游标,然后是条件和handler u2022 本地变量可以通过declare语句进行声明 u2022 声明后的变量可以通过select … into var_list进行赋值,或者通过set语句赋值,或者通过定义游标并使用fetch … into var_list赋值 u2022 通过declare声明变量方法: u2022 MySQL支持if,case,iterate,leave,loop,while,repeat语句作为存储过程和函数中的 流程控制语句 ,另外return语句也是函数中的特定流程控制语句 u2022 Case语句在存储过程或函数中表明了 复杂的条件选择语句 u2022 IF语句在存储过程或函数中表明了 基础的条件选择语句 其中在 function 里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的 function 指定一个参数。 在 MySQL 中创建函数时出现这种错误的解决方法: set global log_bin_trust_function_creators=TRUE; u2022 Iterate语句 仅出现在loop,repeat,while循环语句中,其含义表示重新开始此循环 u2022 Leave语句表明 退出指定标签的流程控制语句块 u2022 通常会用在begin…end,以及loop,repeat,while的循环语句中 u2022 Loop语句是存储过程或函数中表达 循环执行 的一种方式 u2022 repeat语句是存储过程或函数中表达 循环执行 的一种方式 u2022 while语句是存储过程或函数中表达 循环执行 的一种方式 u2022 Return语句用在 函数中,用来终结函数的执行并将指定值返回给调用者 u2022 Cursor游标用来 声明一个数据集 u2022 游标的声明必须在变量和条件声明之后,在handler声明之前 u2022 Cursor close语句用来 关闭之前打开的游标 u2022 Cursor declare语句用来声明一个游标和指定游标对应的数据集合, 通常数据集合是一个select语句 u2022 Cursor fetch语句用来获取游标指定数据集的 下一行数据 并将各个字段值赋予后面的变量 u2022 Open cursor语句用来打开一个之前已经 声明好的游标 u2022 Declare condition语句命名 特定的错误条件 ,而该特定错误可以在declare…handler中指定 处理方法 u2022 比如在MySQL中1051error code表示的是unknown table的错误,如果要对这 个错误做特殊处理,可以用三种方法: u2022 Declare handler语句用来声明一个handler来处理一个或多个特殊条件,当其中的某个条件满足时则触发其中的statement语句执行 u2022 Statement可以是一个简单SQL语句,也可以是begin…end组成的多个语句 u2022 Handler_action子句声明当执行完statement语句之后应该怎么办 Condition_value的值有以下几种: u2022 当condition发生但没有声明handler时,则存储过程和函数依照如下规则处理 u2022 create trigger语句用来创建一个触发器,触发器的作用是当表上有对应SQL语句发生时,则触发执行 u2022 触发器创建时需要 指定对应的表名 tbl_name u2022 Definer关键词用来指定trigger的安全环境 u2022 Trigger_time指定触发器的执行时间,BEFORE和AFTER指定触发器在表中的 每行数据修改前或者后 执行 u2022 Trigger_event指定触发该触发器的具体 事件 u2022 INSERT当新的一行数据插入表中时触发,比如通过执行insert,load data,replace语句插入新数据 u2022 UPDATE当表的一行数据被修改时触发,比如执行update语句时 u2022 DELETE当表的一行数据被删除时触发,比如执行delete,replace语句时 u2022 当执行insert into … on duplicate key update语句时,当碰到重复行执行update时,则触发update下的触发器 u2022 从5.7.2版本开始,可以创建具有相同trigger_time和trigger_event的同一个表上的多个触发器,默认情况下按照创建的时间依次执行,通过 指定FOLLOWS/PRECEDES改变执行顺序 ,即FOLLOWS时表示新创建的触发器后执行,PRECEDES则表示新触发器先执行 u2022 Trigger_body表示触发器触发之后要执行的一个或多个语句,在内部可以引用涉及表的字段, OLD.col_name表示行数据被修改或删除之前的字段数据,NEW.col_name表示行数据被插入或修改之后的字段数据 u2022 Drop trigger语句用来 删除一个触发器 u2022 If exists短语用来避免删除不存在的触发器时引发报错 u2022 当你执行drop table时,表上的触发器也被drop掉了
2023-06-08 04:38:371

linux下如何写个SHELL脚本,每天执行这么几句命令:

每天自动执行肯定是要用一个crontab的脚本可以这样写:#!/bin/bashPRO=ps x|grep p|grep -v grep|awk "{print $1}"kill -9 $PROservice httpd start脚本上面即可实现了如果要每天自动执行,那么需要添加一条crontab如果你的P进程是apache进程,那么直接start就行,如果不是那么要restart0 1 * * * /usr/local/encode/apachectl restart上面提到的只能在/usr/local/encode下执行是说明你的服务直接执行的脚本
2023-06-08 04:38:452

Shell基本脚本命令使用教程

1、本地变量:用户私有变量,只有本用户可以访问,保存在家目录的 .bash_profile、.bashrc文件中 2、全局变量:所有用户都可以使用,保存在 /etc/profile 文件中 3、用户自定义变量:用户自定义,比如脚本中的变量 定义变量格式: 变量名=值 (=两边不能有空格) 字符串用单引号或者双引号引起来 shell支持正则表达式的常见命令:grep、sed、awk。 sed 是一个行(流)编辑器,非交互式的对文件内容进行增删改查操作 awk 能够集过滤、提取、运算为一体,它的工作方式是读取数据,将每一行数据视为一条记录,每条记录以字段分隔符分成若干字段,然后输出各个字段的值。平行命令还有 gawk、pgawk、dgawk。
2023-06-08 04:39:231

触摸屏上的数据,在PLC理怎么处理,PLC里该怎么编写那些变量

你把逻辑搞反了吧
2023-06-08 04:39:336

红色警戒 2尤里的复仇地图编辑器怎么使用

先备份编辑器安装目录下的*.exe和FA*.ini文件,然后将下载的RAR 压缩包内文件解至编辑器目录内即可。
2023-06-08 04:39:494

工程变量和设计变量在使用过程中的区别

工程变量前面有一个前缀,以和本地变量区分。工程变量的作用区间是整个Project,本地变量作用区间是所在的Design。在HFSS中,物体模型的尺寸、物体的材料属性等设计参数都可以用变量来表示。同时在HFSS设计中,如果要使用参数扫描、优化设计和调协分析等功能,都必须要用到变量。
2023-06-08 04:39:561

ThreadLocal的正确使用与原理

ThreadLocal是线程Thread中属性threadLocals即ThreadLocal.ThreadLocalMap的管理者,ThreadLocal用于给每个线程操作自己线程的本地变量,通过线程私有从而保证线程安全性。 拿 get() 方法来说,线程的本地变量是存放在线程实例的属性ThreadLocalMap上的,ThreadLocalMap本质上就是一个HashMap,ThreadLocal只是一个管理者,当我们的线程需要拿到自己的本地变量时,我们直接调用ThreadLocal去get本地变量即可。 因为 get() 方法底层会先获取到当前线程,然后通过当前线程拿到他的属性值ThreadLocalMap,如果ThreadLocalMap为空,则会调用ThreadLocal的初始化方法拿到初始值返回,如果不为空,则会拿该ThreadLocal作为key去获取该线程下的ThreadLocalMap里对应的value值。 线程的属性值ThreadLocalMap中使用的 key 为 ThreadLocal 的弱引用,而value是强引用。所以,如果ThreadLocal没有被外部强引用的情况下,在垃圾回收的时候,key 会被清理掉,而value 不会被清理掉。这样的话,ThreadLocalMap 中就会出现 key 为 null 的 Entry。假如我们不做任何措施的话,value 永远无法被 GC 回收,这个时候就可能会产生内存泄露。 因此针对这种情况,我们有两种原则: InheritableThreadLocal类是ThreadLocal类的子类。ThreadLocal中每个线程拥有它自己的值,与ThreadLocal不同的是, InheritableThreadLocal允许一个线程以及该线程创建的所有子线程都可以访问它保存的值 。
2023-06-08 04:40:031

Windows 操作系统的使用

Windows 操作系统的使用   Windows 规定了这个限制条件,目的是为了确保内核对象结构保持状态的一致。下面是关于Windows 操作系统的使用,希望大家认真阅读!   1,进程虚拟地址空间   在windows操作系统中,每个进程都有自己的私有地址空间,因此一个进程的线程只能访问属于这个进程的内存空间,即进程之间是地址隔离的。在windows2000中,进程虚拟地址空间可分为如下四个部分:   1)NULL 区 (0x00000000~0x0000FFFF): 如果进程中的一个线程试图操作这个分区中的数据,CPU就会引发非法访问。他的作用是,调用malloc等内存分配函数时,如果无法找到足够的内存空间,它将返回NULL。而不进行安全性检查。它只是假设地址分配成功,并开始访问内存地址0x00000000(NULL)。由于禁止访问内存的这个分区,因此会发生非法访问现象,并终止这个进程的运行。   2)用户模式分区 ( 0x00010000~0xBFFEFFFF):这个分区中存放进程的私有地址空间。一个进程无法以任何方式访问另外一个进程驻留在这个分区中的数据(相同exe,通过copy-on-write来完成地址隔离)。(在windows中,所有.exe和动态链接库都载入到这一区域。系统同时会把该进程可以访问的所有内存映射文件映射到这一分区)。   2)隔离区 (0xBFFF0000~0xBFFFFFFF):这个分区禁止进入。任何试图访问这个内存分区的操作都是违规的。微软保留这块分区的目的是为了简化操作系统的现实。   3)内核区 (0xC0000000~0xFFFFFFFF):这个分区存放操作系统驻留的代码。线程调度、内存管理、文件系统支持、网络支持和所有设备驱动程序代码都在这个分区加载。这个分区被所有进程共享。   一、在这一节,我们详细讨论一下用户模式分区,用户模式分区从地地址到高地址依次为:   1)代码段,存放函数体的二进制代码。   2)静态数据区(分为以初始化数据段和未初始化数据段)全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放 。   3)堆,一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。   ......(未映射部分)(这个部分包含各种导入的dll等)   4)栈, 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。   二、下面详细介绍exe导入到执行的全过程,以及地址空间的加载。   1)系统找到在调用CreateProcess时指定的exe文件。   2)系统创建一个新进程的内核对象。   3)系统为这个新进程创建一个私有的地址空间。   4)系统保留一个足够大的地址空间区域,用来存放exe文件。这个区域的位置在exe文件中设定。默认情况下,exe文件的基地址是0x0400000. (1.编译器处理每个源代码模块,生成obj文件。2.链接程序将所有obj模块的内容组合在一起,生成一个单独的可执行映射文件即exe,该映射文件包含用于可执行模块的所有二进制代码以及全局/静态数据变量,同时也包含一个导入部分,列出了该可执行模块所需要的所有dll模块的名字,对于每个列出的 dll名,该导入部分指明了那些函数和变量符号是被可执行的二进制代码所引用的)   5)在将exe文件映射到进程的地址空间之后,系统会访问exe 文件中的一个段(这个段列出了一些DLL文件),并列出exe文件代码中调用函数dll文件的部分。然后,系统为每个dll文件调用loadlibrary函数,如果某个dll文件需要调用更多的 dll,那么系统会再次调用loadlibrary函数,来加载这个dll。系统保留一个足够大的地址空间区域,用来存放这个dll文件。默认情况下,微软创建dll文件基地址0x10000000。 windows提供的所有标准系统dll都有不同的基地址,这样,即使加载到单个地址空间,他们之间也不会重叠。(1.编译器处理每个源代码模块,生成一个obj模块。2.链接程序将所有obj模块的内容组合在一起,生成一个单独的dll映像文件,该映像文件包含用于dll的所有二进制代码以及全局/静态数据变量。3.如果链接程序检查到dll的源代码模块至少导出了一个函数或变量,则链接程序同时生成一个单独的lib文件,这个lib文件很小,只是简单地列出了所有被导出的函数和变量的符号名)   6)当把所有的exe文件和dll文件都映射到进程的地址空间之后,系统就会创建一个线程内核对象,并使用该线程以DLL_PROCESS_ATTACH为参数来调用每个DLL的DllMain函数,当所有映射的DLL都对此通知做出相应后,系统将驱使主线程开始执行exe文件的启动代码(winmainCRTStartup 函数),这个函数负责对c/c++运行时库进行初始化和调用函数入口函数(main 或 winmain)。   下面强调一些dll和lib的加载区别:   dll允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息(即将dll附带的lib加载到可执行模块中)。   对于lib文件,链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件中。   三、堆和栈的理论知识   3.1申请方式   stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间   heap: 需要程序员自己申请,并指明大小,在c中malloc函数 ,在C++中用new运算符 。   3.2 申请后系统的响应   栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。   堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,   会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的"空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。   3.3申请大小的限制   栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。   堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。   3.4申请效率的比较:   栈由系统自动分配,速度较快。但程序员是无法控制的。   堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便.   另外,在WINDOWS下,最好的方式是用VirtualAlloc分配内存,他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存,虽然用起来最不方便。但是速度快,也最灵活。   3.5堆和栈中的存储内容   栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。   当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。   堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。   3.6 “栈(stack)”和“堆(heap)”是两种不同的动态数据区,栈是一种先进后出的线性结构,栈顶地址总是小于等于栈的基地址。堆是一种链式结构。进程的每个线程都有私有的“栈”,所以每个线程虽然代码一样,但本地变量的数据都是互不干扰。一个堆栈可以通过“基地址”和“栈顶”地址来描述。全局变量和静态变量分配在静态数据区,本地变量分配在动态数据区,即堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量。   四、下面说明一下啊函数的调用堆栈变换,来更好的理解堆栈的原理。(VS2005测试)   压栈的顺序是从高地址向低地址方向。   1)参数以从右到左的次序压入堆栈。   2)压入EBP的值(书上分析这个位置插入一个函数返回指令地址,但分析时没有发现因为间隔只有4个字节)   3)压入局部变量   4)返回值放入EAX寄存器中。因为win32汇编一般用eax返回结果 所以如果最终结果不是在eax里面的话 还要把它放到eax。所以返回值的释放过程在参数之后进行。 ;
2023-06-08 04:40:111

C#:什么时候应该使用var?

  C# 新增了关键字 var 在编译器能明确判断变量的类型时 它允许对本地类型进行推断 然而 对于何时应该使用它却存在某些争论 开发IDE工具的公司ReSharper的Ilya Ryzhenkov总结了使用var的一些好处    它有利于更好地为本地变量命名    它有利于设计更好的API    它促使对变量进行初始化    它消除了代码的混乱    它不需要using指示符   RSS Bandit的Dare Obasanjo对此则不敢苟同 由于var给他的开源项目(译注 RSS Bandit项目使用了ReSharper)带来了不利影响 他随后发表了对Ryzhenkov观点的回应 他回击道   有趣的是 这里列出的所有 好处 主要针对的不仅是形式上的改进 而且它们之间还相互矛盾 例如 Ryzhenkov宣称var有利于对 更好地为本地变量命名 这实际上意味着迫使开发人员使用更长的匈牙利风格的变量命名 颇为滑稽的是 这种长的变量名完全会加剧代码的混乱 因为这样的变量名是随处可见的 相比而言 只有在声明变量的时候显示单个的类型名 会保持代码的整洁 那种var有利于 设计更好的API 的观点实际上如出一辙 因为这种观点主张 如果要求开发人员使用更长的描述性属性名(例如使用XmlNode XmlNodeName 而不是XmlNode Name) 就会达到改进的目的 或许应该有人告知ReSharper的人员 这种将类型信息编码到变量名中的方式实在是糟透了 而这也正是我们首选强类型编程语言例如C#的原因所在   此外 鼓励变量初始化的主张也显得有些不可思议 因为C#编译器对此是强制要求的 更重要的是 在使用变量之前 通常需要将变量初始化为null 而var关键字对此却不支持   官方C#语言参考中的一行内容佐证了Dare的观点   过度使用var会使得源代码晦涩难懂 只有在必要的时候 才推荐使用var 也就是说当变量用来存储一个匿名类型或者匿名类型集合的时候   对于那种var会降低代码可读性的抱怨 并非人人都赞同 Arnon Rotem Gal Oz写道   对于代码可读性的主张 我更倾向于专注更加强大的方法 例如保持方法简短 有意义的方法和变量名 以及支持测试(这实际上可以帮助你理解代码是如何运作的……)不仅如此 如果你真的非常非常需要代码可读性 ReSharper工具可以在你的鼠标移动到var关键字之上时 告诉你它的类型;)   Chris Sutton似乎更进一步 含蓄地指出类型是无关紧要的   那么 我的建议是只有当你不知道类型的时候 才使用var 这里是我不同的见解和用法 请看如下代码片断   var procs = from p in ServiceController GetServices()where p Status == ServiceControllerStatus Runningselect p;procs ToList() ForEach(p=> Console WriteLine(p ServiceName));   procs的类型无疑为IEnumerable 然而这却与我无关 我首先关注的是procs是一个列表 列表中的每一项都具有一个属性ServiceName 潜在的类型对于编译器很重要 而那些不得不去阅读代码的人们却不是编译器 对吗? lishixinzhi/Article/program/net/201311/12131
2023-06-08 04:40:181

什么叫缓冲区溢出

缓冲区溢出语音解释.通俗易懂.http://www.enet.com.cn/article/2005/0808/A20050808442559.shtml
2023-06-08 04:40:254

python中的本地变量(local variable)和全局变量(global variable)分别是什么?

python中直接定义的变量就是本地变量,使用global定义的变量就是全局变量。比如:1234567891011a = 1b = 1 def foo1(): global b #申明使用全局b a = 2 #a是本地变量 b = 2 #b是全局变量foo1() print aprint b如果解决了您的问题请采纳!如果未解决请继续追问
2023-06-08 04:40:451

变量的作用域:本地变量和成员变量

我也不懂本地变量 和 成员变量不过变量的作用域我是明白的简单的讲就是,大括号‘{}"内定义的变量可以在{}内以及他所嵌套的{}内使用,这就是变量的作用域但是!当其嵌套内的{}中有同名变量的时候以本括号内的变量为准列子就是:哈哈,我老师就是这么讲的宪法和地方法律宪法是全局变量,地方法律是局域变量地方法律大于宪法 就是局域变量和全局变量冲突时服从局域变量
2023-06-08 04:40:522

什么是变量?

全局变量:在函数外定义的变量是外部变量,外部变量是全局变量,全局变量可以为本文件中其它函数所共用,它的有效范围从定义变量的位置开始到本源文件结束;局部变量:在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外时不能使用这些变量的,它们称为局部变量;静态变量:静态变量的类型说明符是static。静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由static加以定义后才能成为静态外部变量,或称静态全局变量。对于自动变量,它属于动态存储方式。但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。外部变量:传递参数是给函数传送信息的一种方法。函数还可以通过外部变量(externalvariable)进行通信。外部变量是声明在任何函数体外的。外部变量(有时称为全局变量)的性质不同于局部变量的性质。l静态存储期限。就如同声明为static的局部变量一样,外部变量拥有静态存储期限。存储在外部变量中的值将永久保留下来。l文件作用域。外部变量拥有文件作用域:从变量被声明的点开始一直到所在文件的末尾。因此,跟随在外部变量声明之后的所有函数都可以访问(并修改)它。在C语言中,函数不能嵌套定义,但可以嵌套调用。http://baike.baidu.com/view/296689.htm转载百度
2023-06-08 04:41:0113

x86和x64处理器有什么区别?

Linux操作系统中x64和x86的区别如下:一、寄存器分配的不同64位有16个寄存器,32位只有8个,32位前8个都有不同的命名,分别是e_,而64位前8个使用r代替e,即r_;32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi、rsi、rdx、rcx、r8、r9作为第1-6个参数,rax作为返回值;64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用;二、函数调用的不同x_64的参数通过寄存器传递,callq在栈里存放一个8位的返回地址;许多函数不再有栈帧,只有无法将所有本地变量放在寄存器里的才会在栈上分配空间;一些寄存器被设计成为被调用者-存储的寄存器,这些必须在需要改变他们值的时候存储他们并且之后恢复他们。三、参数传递的不同6个寄存器用来传递参数;剩下的寄存器按照之前的方式传递(不过是与rsp相关了,ebp不再作为栈帧指针,并且从rsp开始第7个参数,rsp+8开始第8个,以此类推);调用时,rsp向下移动8位(存入返回地址),寄存器参数无影响,第7个及之后的参数现在则是从rsp+8开始第7个,rsp+16开始第8个,以此类推;四、栈帧的不同很多情况下不再需要栈帧,比如在没有调用别的函数,且寄存器足以存储参数,那么就只需要存储返回地址即可,需要栈帧的情况:a. 本地变量太多,寄存器不够;b. 一些本地变量是数组或结构体;c. 函数使用了取地址操作符来计算一个本地变量的地址;d. 函数必须用栈传送一些参数给另外一个函数;e. 函数需要保存一些由被调用者存储的寄存器的状态(以便于恢复)五、运算速度的不同64位cpu的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据,比32位提高了一倍,理论上性能会相应提升1倍。
2023-06-08 04:41:251

JAVA中Annotation是什么,有什么用

注解,常用于标示。在反射中常用
2023-06-08 04:41:322

linux x64和x86是什么关系?

Linux操作系统中x64和x86的区别如下:一、寄存器分配的不同64位有16个寄存器,32位只有8个,32位前8个都有不同的命名,分别是e_,而64位前8个使用r代替e,即r_;32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi、rsi、rdx、rcx、r8、r9作为第1-6个参数,rax作为返回值;64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用;二、函数调用的不同x_64的参数通过寄存器传递,callq在栈里存放一个8位的返回地址;许多函数不再有栈帧,只有无法将所有本地变量放在寄存器里的才会在栈上分配空间;一些寄存器被设计成为被调用者-存储的寄存器,这些必须在需要改变他们值的时候存储他们并且之后恢复他们。三、参数传递的不同6个寄存器用来传递参数;剩下的寄存器按照之前的方式传递(不过是与rsp相关了,ebp不再作为栈帧指针,并且从rsp开始第7个参数,rsp+8开始第8个,以此类推);调用时,rsp向下移动8位(存入返回地址),寄存器参数无影响,第7个及之后的参数现在则是从rsp+8开始第7个,rsp+16开始第8个,以此类推;四、栈帧的不同很多情况下不再需要栈帧,比如在没有调用别的函数,且寄存器足以存储参数,那么就只需要存储返回地址即可,需要栈帧的情况:a. 本地变量太多,寄存器不够;b. 一些本地变量是数组或结构体;c. 函数使用了取地址操作符来计算一个本地变量的地址;d. 函数必须用栈传送一些参数给另外一个函数;e. 函数需要保存一些由被调用者存储的寄存器的状态(以便于恢复)五、运算速度的不同64位cpu的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据,比32位提高了一倍,理论上性能会相应提升1倍。
2023-06-08 04:41:392

X86和X64有什么区别

Linux操作系统中x64和x86的区别如下:一、寄存器分配的不同64位有16个寄存器,32位只有8个,32位前8个都有不同的命名,分别是e_,而64位前8个使用r代替e,即r_;32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi、rsi、rdx、rcx、r8、r9作为第1-6个参数,rax作为返回值;64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用;二、函数调用的不同x_64的参数通过寄存器传递,callq在栈里存放一个8位的返回地址;许多函数不再有栈帧,只有无法将所有本地变量放在寄存器里的才会在栈上分配空间;一些寄存器被设计成为被调用者-存储的寄存器,这些必须在需要改变他们值的时候存储他们并且之后恢复他们。三、参数传递的不同6个寄存器用来传递参数;剩下的寄存器按照之前的方式传递(不过是与rsp相关了,ebp不再作为栈帧指针,并且从rsp开始第7个参数,rsp+8开始第8个,以此类推);调用时,rsp向下移动8位(存入返回地址),寄存器参数无影响,第7个及之后的参数现在则是从rsp+8开始第7个,rsp+16开始第8个,以此类推;四、栈帧的不同很多情况下不再需要栈帧,比如在没有调用别的函数,且寄存器足以存储参数,那么就只需要存储返回地址即可,需要栈帧的情况:a. 本地变量太多,寄存器不够;b. 一些本地变量是数组或结构体;c. 函数使用了取地址操作符来计算一个本地变量的地址;d. 函数必须用栈传送一些参数给另外一个函数;e. 函数需要保存一些由被调用者存储的寄存器的状态(以便于恢复)五、运算速度的不同64位cpu的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据,比32位提高了一倍,理论上性能会相应提升1倍。
2023-06-08 04:41:451

Linux系统中x86跟x64的区别是什么?

Linux操作系统中x64和x86的区别如下:一、寄存器分配的不同64位有16个寄存器,32位只有8个,32位前8个都有不同的命名,分别是e_,而64位前8个使用r代替e,即r_;32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi、rsi、rdx、rcx、r8、r9作为第1-6个参数,rax作为返回值;64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用;二、函数调用的不同x_64的参数通过寄存器传递,callq在栈里存放一个8位的返回地址;许多函数不再有栈帧,只有无法将所有本地变量放在寄存器里的才会在栈上分配空间;一些寄存器被设计成为被调用者-存储的寄存器,这些必须在需要改变他们值的时候存储他们并且之后恢复他们。三、参数传递的不同6个寄存器用来传递参数;剩下的寄存器按照之前的方式传递(不过是与rsp相关了,ebp不再作为栈帧指针,并且从rsp开始第7个参数,rsp+8开始第8个,以此类推);调用时,rsp向下移动8位(存入返回地址),寄存器参数无影响,第7个及之后的参数现在则是从rsp+8开始第7个,rsp+16开始第8个,以此类推;四、栈帧的不同很多情况下不再需要栈帧,比如在没有调用别的函数,且寄存器足以存储参数,那么就只需要存储返回地址即可,需要栈帧的情况:a. 本地变量太多,寄存器不够;b. 一些本地变量是数组或结构体;c. 函数使用了取地址操作符来计算一个本地变量的地址;d. 函数必须用栈传送一些参数给另外一个函数;e. 函数需要保存一些由被调用者存储的寄存器的状态(以便于恢复)五、运算速度的不同64位cpu的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据,比32位提高了一倍,理论上性能会相应提升1倍。
2023-06-08 04:41:542

python的简单问题?

要把代码发现来才知道,以下是常见的错误下面终于要讲到当你用到更多的Python的功能(数据类型,函数,模块,类等等)时可能碰到的问题了。由于篇幅有限,这里尽量精简,尤其是对一些高级的概念。要想了解更多的细节,敬请阅读Learning Python, 2nd Edition的逗小贴士地以及逗Gotchas地章节。 打开文件的调用不使用模块搜索路径当你在Python中调用open()来访问一个外部的文件时,Python不会使用模块搜索路径来定位这个目标文件。它会使用你提供的绝对路径,或者假定这个文件是在当前工作目录中。模块搜索路径仅仅为模块加载服务的。不同的类型对应的方法也不同列表的方法是不能用在字符串上的,反之亦然。通常情况下,方法的调用是和数据类型有关的,但是内部函数通常在很多类型上都可以使用。举个例子来说,列表的reverse方法仅仅对列表有用,但是len函数对任何具有长度的对象都适用不能直接改变不可变数据类型记住你没法直接的改变一个不可变的对象(例如,元组,字符串): T = (1, 2, 3) T[2] = 4 # 错误 用切片,联接等构建一个新的对象,并根据需求将原来变量的值赋给它。因为Python会自动回收没有用的内存,因此这没有看起来那么浪费: T = T[:2] + (4,) # 没问题了: T 变成了 (1, 2, 4) 使用简单的for循环而不是while或者range 当你要从左到右遍历一个有序的对象的所有元素时,用简单的for循环(例如,for x in seq:)相比于基于while-或者range-的计数循环而言会更容易写,通常运行起来也更快。除非你一定需要,尽量避免在一个for循环里使用range:让Python来替你解决标号的问题。在下面的例子中三个循环结构都没有问题,但是第一个通常来说更好;在Python里,简单至上。 S = "lumberjack" for c in S: print c # 最简单 for i in range(len(S)): print S[i] # 太多了 i = 0 # 太多了 while i len(S): print S[i]; i += 1 不要试图从那些会改变对象的函数得到结果诸如像方法list.append()和list.sort()一类的直接改变操作会改变一个对象,但不会将它们改变的对象返回出来(它们会返回None);正确的做法是直接调用它们而不要将结果赋值。经常会看见初学者会写诸如此类的代码: mylist = mylist.append(X) 目的是要得到append的结果,但是事实上这样做会将None赋值给mylist,而不是改变后的列表。更加特别的一个例子是想通过用排序后的键值来遍历一个字典里的各个元素,请看下面的例子: D = {...} for k in D.keys().sort(): print D[k] 差一点儿就成功了——keys方法会创建一个keys的列表,然后用sort方法来将这个列表排序——但是因为sort方法会返回None,这个循环会失败,因为它实际上是要遍历None(这可不是一个序列)。要改正这段代码,将方法的调用分离出来,放在不同的语句中,如下: Ks = D.keys() Ks.sort() for k in Ks: print D[k] 只有在数字类型中才存在类型转换在Python中,一个诸如123+3.145的表达式是可以工作的——它会自动将整数型转换为浮点型,然后用浮点运算。但是下面的代码就会出错了: S = "42" I = 1 X = S + I # 类型错误 这同样也是有意而为的,因为这是不明确的:究竟是将字符串转换为数字(进行相加)呢,还是将数字转换为字符串(进行联接)呢看在Python中,我们认为逗明确比含糊好地(即,EIBTI(Explicit is better than implicit)),因此你得手动转换类型: X = int(S) + I # 做加法: 43 X = S + str(I) # 字符串联接: "421" 循环的数据结构会导致循环尽管这在实际情况中很少见,但是如果一个对象的集合包含了到它自己的引用,这被称为循环对象(cyclic object)。如果在一个对象中发现一个循环,Python会输出一个[…],以避免在无限循环中卡住: >>> L = ["grail"] # 在 L中又引用L自身会 >>> L.append(L) # 在对象中创造一个循环 >>> L ["grail", [...]] 除了知道这三个点在对象中表示循环以外,这个例子也是很值得借鉴的。因为你可能无意间在你的代码中出现这样的循环的结构而导致你的代码出错。如果有必要的话,维护一个列表或者字典来表示已经访问过的对象,然后通过检查它来确认你是否碰到了循环。赋值语句不会创建对象的副本,仅仅创建引用这是Python的一个核心理念,有时候当行为不对时会带来错误。在下面的例子中,一个列表对象被赋给了名为L的变量,然后L又在列表M中被引用。内部改变L的话,同时也会改变M所引用的对象,因为它们俩都指向同一个对象。 >>> L = [1, 2, 3] # 共用的列表对象 >>> M = ["X", L, "Y"] # 嵌入一个到L的引用 >>> M ["X", [1, 2, 3], "Y"] >>> L[1] = 0 # 也改变了M >>> M ["X", [1, 0, 3], "Y"] 通常情况下只有在稍大一点的程序里这就显得很重要了,而且这些共用的引用通常确实是你需要的。如果不是的话,你可以明确的给他们创建一个副本来避免共用的引用;对于列表来说,你可以通过使用一个空列表的切片来创建一个顶层的副本: >>> L = [1, 2, 3] >>> M = ["X", L[:], "Y"] # 嵌入一个L的副本 >>> L[1] = 0 # 仅仅改变了L,但是不影响M >>> L [1, 0, 3] >>> M ["X", [1, 2, 3], "Y"] 切片的范围起始从默认的0到被切片的序列的最大长度。如果两者都省略掉了,那么切片会抽取该序列中的所有元素,并创造一个顶层的副本(一个新的,不被公用的对象)。对于字典来说,使用字典的dict.copy()方法。静态识别本地域的变量名 Python默认将一个函数中赋值的变量名视作是本地域的,它们存在于该函数的作用域中并且仅仅在函数运行的时候才存在。从技术上讲,Python是在编译def代码时,去静态的识别本地变量,而不是在运行时碰到赋值的时候才识别到的。如果不理解这点的话,会引起人们的误解。比如,看看下面的例子,当你在一个引用之后给一个变量赋值会怎么样: >>> X = 99 >>> def func(): ... print X # 这个时候还不存在 ... X = 88 # 在整个def中将X视作本地变量 ... >>> func( ) # 出错了! 你会得到一个逗未定义变量名地的错误,但是其原因是很微妙的。当编译这则代码时,Python碰到给X赋值的语句时认为在这个函数中的任何地方X会被视作一个本地变量名。但是之后当真正运行这个函数时,执行print语句的时候,赋值语句还没有发生,这样Python便会报告一个逗未定义变量名地的错误。事实上,之前的这个例子想要做的事情是很模糊的:你是想要先输出那个全局的X,然后创建一个本地的X呢,还是说这是个程序的错误看如果你真的是想要输出这个全局的X,你需要将它在一个全局语句中声明它,或者通过包络模块的名字来引用它。默认参数和可变对象在执行def语句时,默认参数的值只被解析并保存一次,而不是每次在调用函数的时候。这通常是你想要的那样,但是因为默认值需要在每次调用时都保持同样对象,你在试图改变可变的默认值(mutable defaults)的时候可要小心了。例如,下面的函数中使用一个空的列表作为默认值,然后在之后每一次函数调用的时候改变它的值: >>> def saver(x=[]): # 保存一个列表对象 ... x.append(1) # 并每次调用的时候 ... print x # 改变它的值 ... >>> saver([2]) # 未使用默认值 [2, 1] >>> saver() # 使用默认值 [1] >>> saver() # 每次调用都会增加! [1, 1] >>> saver() [1, 1, 1] 有的人将这个视作Python的一个特点——因为可变的默认参数在每次函数调用时保持了它们的状态,它们能提供像C语言中静态本地函数变量的类似的一些功能。但是,当你第一次碰到它时会觉得这很奇怪,并且在Python中有更加简单的办法来在不同的调用之间保存状态(比如说类)。要摆脱这样的行为,在函数开始的地方用切片或者方法来创建默认参数的副本,或者将默认值的表达式移到函数里面;只要每次函数调用时这些值在函数里,就会每次都得到一个新的对象: >>> def saver(x=None): ... if x is None: x = [] # 没有传入参数看 ... x.append(1) # 改变新的列表 ... print x ... >>> saver([2]) # 没有使用默认值 [2, 1] >>> saver() # 这次不会变了 [1] >>> saver() [1] 其他常见的编程陷阱下面列举了其他的一些在这里没法详述的陷阱:在顶层文件中语句的顺序是有讲究的:因为运行或者加载一个文件会从上到下运行它的语句,所以请确保将你未嵌套的函数调用或者类的调用放在函数或者类的定义之后。 reload不影响用from加载的名字:reload最好和import语句一起使用。如果你使用from语句,记得在reload之后重新运行一遍from,否则你仍然使用之前老的名字。在多重继承中混合的顺序是有讲究的:这是因为对superclass的搜索是从左到右的,在类定义的头部,在多重superclass中如果出现重复的名字,则以最左边的类名为准。在try语句中空的except子句可能会比你预想的捕捉到更多的错误。在try语句中空的except子句表示捕捉所有的错误,即便是真正的程序错误,和sys.exit()调用,也会被捕捉到。
2023-06-08 04:42:011

JAVA中Annotation是什么,有什么用

请输入你Annotation提供了一条与程序元素关联任何或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。这些被存储在annotation的“name=value”结构对中。annotation类型是一种接口,能够通过反射API的方式提供对其的访问。annotation能被用来为某个程序元素(类、方法、成员变量等)关联任何的。需要注意的是,这里存在着一个基本的潜规则:annotaion不能影响程序代码的执行,无论增加、删除annotation,代码都始终如一的执行。另外,尽管一些annotation通过java的反射api方法在运行时被访问,而java语言解释器在工作时忽略了这些annotation。正是由于忽略了annotation,导致了annotation类型在代码中是“不起作用”的;只有通过某种配套的工具才会对annotation类型中的进行访问和处理。本文中将涵盖标准的annotation和meta-annotation类型,陪伴这些annotation类型的工具是java编译器(当然要以某种特殊的方式处理它们)。由于上述原因,annotation在使用时十分简便。一个本地变量可以被一个以NonNull命名的annotation类型所标注,来作为对这个本地变量不能被赋予null值的断言。而我们可以编写与之配套的一个annotation代码,使用它来对具有前面变量的代码进行解析,并且尝试验证这个断言。当然这些代码并不必自己编写。在JDK安装后,在JDK/bin目录中可以找到名为“apt”的工具,它提供了处理annotation的框架:它启动后扫描源代码中的annotation,并调用我们定义好的annotation处理器完成我们所要完成的工作(比如验证前面例子中的断言)。说到这里,annotation的强大功能似乎可以替代XDoclet这类的工具了,随着我们的深入,大家会更加坚信这一点的答案... 拿别人的,希望可以帮到你~
2023-06-08 04:42:071

无效的过程调用或参数

在过程调用中传递了一个无效参数。这可能是由于参数超出范围,或包含无效数据。另外,有可能在不适当的时间对过程进行了调用。要纠正该错误 验证传递给过程的参数是有效的。 验证在适当的时间调用函数。 溢出试图赋给变量的赋值太大,这是因为: 赋值,计算或者数据类型转换结果很大以至于不能代表此种类型变量值的范围。 属性赋值超出了属性所能接受的最大值。 整数类型数字的计算结果大于一个整数。 要纠正该错误 将值赋给一个较大取值范围的变量类型。 确保赋值符合属性范围。 内存不足分配与该计算机有效内存一样多的内存。这可能是一个动态分配数组增长得太大,或者是对象实例数目过多。要纠正该错误 使用Erase语句来重新分配动态数组的储存空间。 使用ReDim语句来重新分配储存空间。 关闭任何已经打开、不必需的应用程序,文件或者源文件。 下标越界要访问的数组中元素数目比期望的少。例如试图从一个定义为10个元素的数组中访问到11个元素。.要纠正该错误 确保你的代码中包含检察元素是否越界的边界。 重新定义一个更大的数组大小至需要的维数。 该数组为定长的或者临时被锁定试图用 ReDim 函数来改变一个定长数组的元素数目。动态数组或者 Variant 变量内的数组可以被暂时的锁定。要纠正该错误 如果在过程内部定义数组,用 ReDim 函数将其从静态变为动态。 如果在模块水平上说明数组,不要指定数组中元素的数目。 被零除创建一个试图将数字被零除的表达式。被零除得到无穷大(不可用)结果。要纠正该错误 检查表达式的输入或大小写错误。 类型不匹配试图比较不相容数据类型的值。例如,比较一个字符串和一个数值。要纠正该错误 当进行比较时,要确保数据类型相同。 用一个的数据类型来计算另一个的值,然后重新比较。 字符串空间溢出试图创建字符串对象时系统内存被用尽。这可能是因为动态分配数组越来越大或对象实例的数目过大。要纠正该错误 使用 Erase 语句来重新分配动态数组的储存空间。 使用 ReDim 语句来重新分配储存空间。 关闭任何已经打开、不必需的应用程序,文件或者源文件 无法执行请求的操作当主机使脚本引擎中断时无法继续执行脚本。主机未指定明确的返回错误代码。要纠正该错误 该错误的解决与主机有关。 堆栈溢出过程嵌套太深。每次代码从一个过程跳到另一个过程,本地变量的内容被放到堆栈中。堆栈是一个大小随着要求执行的脚本动态增长和缩小的内存工作区域。要纠正该错误 检查没有嵌套很深的过程。 确保递归(重入)过程没有经常的调用自身。 确保递归过程被正常终止。 未定义 Sub 或 Function试图调用一个不存在的过程。要纠正该错误 检查过程的拼写确保输入正确。 加载 DLL 错误应用程序引用了一个无法找到的DLL,一个DLL可能引用了另一个无法找到的DLL。要纠正该错误 确保DLL存在。 使用全路径名引用DLL。 获得被引用的DLL并使其对其他DLL有效。 内部错误发生内部错误。要纠正该错误 除非这是由Raise 方法产生,请与微软产品服务联系报告出现错误消息的情况。 未设置对象变量试图使用无效对象的对象属性。如果遗漏了 Set语句,将在对象引用产生错误。要纠正该错误 为对象变量指定一个引用。 For 循环未初始化在脚本中执行跳到For...Next 循环中间的结果。由于For...Next 循环计数必须被初始化所以产生错误。下面演示了一个For...Next 循环的正确结构。For counter = start To end [Step step] [statements] [Exit For] [statements] Next要纠正该错误 移去跳转至For...Next 循环的语句。 确保For...Next循环包含了所有必须的部分。 非法使用 Null试图获得一个为Null 的Variant变量的值。你只能获得包含有效值的Variant 变量的值。Null 是一个 Variant 一个用来指示一个数据项不包含任何有效数据的子类型。要纠正该错误 确保变量包含有效数据。 需要对象提供的对象无效(或无法认为是一个对象)。对属性和方法的引用需要一个显式的对象限定符。要纠正该错误 提供一个对象限定符。 检查对象限定符的拼写。 ActiveX 部件无法创建对象由于对象类未在系统注册表中注册或者是一个或多个相关的动态链接库无效(DLLs), VB 5.5运行时无法初始化对象。另外一种可能情况是,由于未找到或是已经损坏,对象所需的DLL不可用。要纠正该错误 确保所有相关的DLLs有效。例如,数据存取对象(DAO)所需的DLLs在不同的平台下是不同的。你可能不得不返回到安装程序查找该对象。 Internet Explorer可能试图创建对象,但是在Internet Explorer中没有正确的安全许可。重置Internet Explorer 安全设置并重试。 类不支持自动化试图操作一个并不支持自动化的对象属性或方法。可以创建并将指针传递给不支持自动化的对象,但是不能获取它的属性和方法。要纠正该错误 查创建对象应用程序的文档中关于该类自动化使用的限制。 注意 对象可能已经通过使用CreateObject 被创建,但可能已经通过主机对象模型被引入。在自动化操作中未找到文件名或类名使用GetObject 函数,但是将一个不可识别的类或文件名作为参数。GetObject 函数要求包含要获取的对象的文件的完整的路径和名称,或者是在系统中注册过的类名称。要纠正该错误 检查名称的拼写错误,然后重试。 确保class 参数的名称与在系统中注册的相匹配。 对象不支持该属性或方法对该自动化对象指定了一个并不存在的属性或方法。不是所有的对象都支持所有的属性和方法。要纠正该错误 检查属性和方法以确保没有打字错误。 参见对象的文档获取更多的信息。 对象不支持此操作试图引用该对象不支持的一个方法或属性。不是所有的对象支持所用的操作。要纠正该错误 检查属性和方法以确保没有打字错误。 参见对象的文档获取更多的信息。 对象不支持当前的区域设置试图操作一个不支持当前区域设置的对象。区域设置是和给定语言以及国家/地区相对应的一系列信息。本地影响预定义程序项的语言和本地特定设置。以下两种情况时本地信息很重要: code locale 影响语言项例如关键词,并且定义本地特定设置例如小数和列表分割符,日期格式和字符排列顺序。 system locale 影响本地相关的功能执行。例如,当显示数字或者将字符串转换为日期时。使用操作系统提供的控制面板工具来设定系统。 要纠正该错误 检查对象支持的区域设置。 未找到命名参数调用一个过程并指定一个特别的参数,但是过程未被定义为接受以为名称的参数。除非在过程定义中出现,一个命名参数不能在过程调用中使用。要纠正该错误 检查参数名称是否正确拼写,然后再试着调用过程。 参数不可选调用过程但是参数数量错误。传递给过程的参数的数量必须与过程定义的参数数量相同。要纠正该错误 检查函数符号确保提供了所有必须的参数。 错误的参数个数或无效的参数属性值调用过程时如果: 错误的过程名称, 或者, 过程中参数数目错误, 或者, 参数类型错误。 传递给过程的参数数目必须与过程定义中的参数数目相符。要纠正该错误 检查以确保传递给过程的参数列表与过程定义或声明中的相符。 对象不是一个集合试图对一个不是 Collection 类型的对象进行只对 Collection 对象有效的操作。有些属性、方法和操作仅可应用于 Collection 对象。Collection 对象是包含一组互相关联的对象的一种对象。一旦集合中发生了改变,一个对象在 Collection 对象中的位置也会发生改变;因此,Collection 对象中的任何一个对象的位置都可能变化。要纠正该错误 检查对象或属性名称的拼写。 验证对象是一个Collection 对象。 查看用来向集合中添加该对象的 Add 方法,确保语法正确且任何标识符的拼写都正确。 变量使用了 VB 不支持的自动化类型试图使用类型库或者对象库中不被支持的数据类型,任何一门编程语言都不能使用类型库或对象库中的所有变量。要纠正该错误 只使用VB识别的变量类型。 远程服务器不存在或者不能访问用CreateObject函数 来建立一个远程机器的对象,但是调用失败,这是因为无法访问远程服务器或者没有包含特定的类。要纠正该错误 检验远程服务器的名字是否正确。 检验远程服务器的 DCOM 可用。 使用 dcomcnfg 验证安全权限是否允许建立对象。 无效图片试图加载一个无法识别格式的图像。有效格式包括位图(*.bmp),图标(*.ico),以及Windows 元文件(*.wmf)。要纠正该错误 确保要加载的图像文件的格式是有效的。 变量未定义在脚本开始处用Option Explicit 语句,后来又使用一个未被说明的变量名称。当使用Option Explicit 语句时,必须用Dim,Private,Public或者ReDim语句显式地说明所有的变量。要纠正该错误 使用Option Explicit 语句时, 确保用Dim, Private, Public, Or ReDim语句定义了所有的变量。 脚本对象不安全试图使用未被标识为脚本安全的对象。对象创建是否安全由主机决定。总的来说,允许不信任脚本进行有害操作(例如操作硬盘)的对象是不安全的。例如,使用作为客户端的Microsoft Internet Explorer 运行 FileingObject 是不安全的,但是可以在带有Windows Host的本地机器使用该对象。要纠正该错误 确保在使用一个安全的对象。 与对象开发者联系看是否为安全版本。 阅读对象文档发现该对象是否安全。 对象不能安全初始化试图使用未被标识为初始化安全的对象。对象创建是否安全由主机决定。总的来说,允许不信任脚本进行有害操作(例如操作硬盘)的对象是不安全的。例如,使用作为客户端的Microsoft Internet Explorer 运行 FileingObject 是不安全的,但是可以在带有Windows Host的本地机器使用该对象。要纠正该错误 确保在使用一个安全的对象。 与对象开发者联系看是否为安全版本。 阅读对象文档发现该对象是否安全。 对象不能安全创建试图使用一个未被标识为安全创建的对象。对象创建是否安全由主机决定。总的来说,允许不信任脚本进行有害操作(例如操作硬盘)的对象是不安全的。例如,使用作为客户端的Microsoft Internet Explorer 运行 FileingObject 是不安全的,但是可以在带有Windows Host的本地机器使用该对象。要纠正该错误 确保在使用一个安全的对象。 与对象开发者联系看是否为安全版本。 阅读对象文档发现该对象是否安全。 无效或不合格的引用试图对不止一个对象使用With语句。With语句只能被非空对象使用。下面演示了一个With 块的正确结构。With object statements End With要纠正该错误 为With 语句指定一个对象。 类未定义引用未定义(通过New 或 Set语句)的类。要纠正该错误 确保在引用类之前已经定义。 发生异常脚本调用COM对象,然后产生异常。要纠正该错误 除非该调用由 Raise 方法产生,请与产生错误的CM对象开发人员联系。 请与微软产品服务联系报告出现错误消息的情况。 正则表达式中的语法错误搜索字符串的结构违背了VB正则表达式中的一个或多个语法规则。要纠正该错误 保证常规的搜索字符串的表达式符合Perlde的表达语法。 错误的数量词当构造正则表达式的搜索模式时,没有正确的说明匹配的字符串。要纠正该错误 确保搜索模式是正确构造的。 在正则表达式中需要 "]"试图为正则表达式匹配创建一个字符类,但未包含右括号。将单独的字符组合放到方括号里可以将其装配到字符类中。例如, /[abc]/ 匹配字母“a”,“b”,或“c”中任意一个。要纠正该错误 在正则表达式中添加右括号。在正则表达式中需要 ")"试图创建常规的嵌套表达式,但未包含“)”。在正则表达式中括号有几个目的。首先,它将分离的项组成为单个子表达式,所以项目可以通过*,+,?等等来当作一个单元来处理。要纠正该错误 在常规的嵌套表达式中添加右(闭)括号“)”。 字符集越界试图使用无效字符创建正则表达式。正则表达式是由字母数字和元字符组成的。要纠正该错误 仅仅使用有效正则表达式字符来组成正则表达式。
2023-06-08 04:42:321

红色警戒宋哲伦版自己创建的地图怎么设置出生地,为什么一开始就是黑屏

告诉你吧。是你创建的地图有问题。回去改一下。我也遇到过。
2023-06-08 04:42:405

什么是51单片机不可重入的函数?

让我来告诉你答案!一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。2)可重入函数:不为连续的调用持有静态数据。不返回指向静态数据的指针;所有数据都由函数的调用者提供。使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。如果必须访问全局变量,记住利用互斥信号量来保护全局变量。绝不调用任何不可重入函数。3)不可重入函数:函数中使用了静态变量,无论是全局静态变量还是局部静态变量。函数返回静态变量。函数中调用了不可重入函数。函数体内使用了静态的数据结构;函数体内调用了malloc()或者free()函数;函数体内调用了其他标准I/O函数。函数是singleton中的成员函数而且使用了不使用线程独立存储的成员变量。总的来说,如果一个函数在重入条件下使用了未受保护的共享的资源,那么它是不可重入的。
2023-06-08 04:43:001