找回密码
 点一下
查看: 1288|回复: 8

[讨论]关于脚本的问题

[复制链接]
发表于 2010-5-5 14:02:46 | 显示全部楼层 |阅读模式
刚才试验了下,银河脚本中数组大小依然有上限,应该就是(0-8192)了。

具体到某个函数中的局部变量数组,所有数组的大小的总和的上限是8191,多于此数,就不能再申请更多的局部变量或者是提升数组的上限了,否则编辑器会报错——“無法編譯腳本:32k - 1 size limit to local variables(詳細訊息請參閱觸發編輯器)”,不过传参不在此限制内。

具体的例子:
[codes=galaxy]
 void TestFunc_1() {int[8191] aaa;}//8191

 void TestFunc_2(){
    int[8100] aaa;
    int[91] bbb;
}//8100+91=8191

 void TestFunc_3(){
    int[2][3][3][5][7][13] aaa;
    int bb;
}//2*3*3*5*7*13+1=8190+1=8191

struct st1{
    int x;
    int y;
    int z;
};
struct st2{
    st1[545]  a;
    int  b;
    int  c;
    int d;
};
 void TestFunc_4() {
    st2[5]  myst;
    int aaa;
}//(3*545+3)*5+1=1635*5+16=8191
[/codes]

上面的4个函数均不能再增加局部变量了。

还有一个,似乎指针不能通过检查了?
[codes=galaxy]

 void TestFunc_5(){
    int i=2;
    int *pi = &i;
}

[/codes]
发表于 2010-5-5 14:07:13 | 显示全部楼层
实际上,在白塔刚刚出来的时候我就测试过,当时上限应该远不止8192来着的。

难道退化老嘛?~~
回复

使用道具 举报

 楼主| 发表于 2010-5-5 14:10:26 | 显示全部楼层
不清楚呀,刚才测试的就是这个结果。

虽然有了struct 但是没了指针了,这个...
回复

使用道具 举报

发表于 2010-5-5 15:34:54 | 显示全部楼层
看来数组尺寸上限确实又回到8192了。


不过指针应该还在的。
回复

使用道具 举报

发表于 2010-5-5 15:36:12 | 显示全部楼层
话说。他居然没有动态大小的数组么。。。
回复

使用道具 举报

发表于 2010-5-5 16:45:04 | 显示全部楼层
BLZ好象一直都没有做动态存贮结构的习惯
回复

使用道具 举报

 楼主| 发表于 2010-5-5 17:14:38 | 显示全部楼层
啊,补充一下,之前测试的时候,由于是在编辑器中设置的全局数组的大小,发现编辑器自己把数值修改为8192,在脚本中显示为8193,刚才不放心,又测试了下。

顶楼的数据只适合于局域变量,全局变量的大小如头目所说,是远大于8192的,其上限是459431。

超过了这个数,就像局域变量一样,你就不能再申请全局变量或扩大全局数组的大小,同时还不能增加的是自定义函数。(倒是不影响函数里面的局部变量)

具体来说就是
void  a3a() {}
这样的函数占了3个位置。

然后
int  a12312313a() {return 1;}
或  unit  a113a() {return null;}
是5。

unit  a113a() {return UnitFromId(1);}
是9,这个数值是我实测得来的。(ps:考虑到我的地图中已经存在了若干自定义函数,因此真正的数值可能大于459431,但是应该相差不大。)

关于数值为什么是这样,我也不清楚,不会解释这个东西,但是它貌似和银河脚本中代码执行上限有联系。(另外稍微一提的是,银河脚本貌似是有代码执行上限的,这个跟jass2是差不多的可能,假设令变量相互赋值消耗为3的话,其上限数值大概是1000W,这个我不保证对错,大家姑且一看吧。)

----------- 帖子于 17:14 更新 --------- 之前内容发布于 17:11 ------------

哦,补充一下,如果大家设置的数组过大的话,编辑器的报错是
無法編譯腳本:Script too large(詳細訊息請參閱觸發編輯器)

然后,如果大的过分的话,就是
無法編譯腳本:e_noGlobalMemory(詳細訊息請參閱觸發編輯器)

唉,我的繁体编辑器呀,这说的是啥呀
回复

使用道具 举报

发表于 2010-5-5 17:16:50 | 显示全部楼层
e_noGlobalMemory是新增加的错误信息,最初beta出来的时候其实并没有这条错误信息呢。

对应的错误字符串是“无法申请全局内存,请尝试减少尺寸”
回复

使用道具 举报

 楼主| 发表于 2010-5-5 17:20:53 | 显示全部楼层


对了头目,指针应该是如何使用呢,从Danexx那里复制来的代码通过不了呀。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-24 18:36 , Processed in 0.030811 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表