IBM C for AIX 4.3的关于stack的问题
一个例子,运行在IBM RS6000, os:AIX4.3.3, C:IBM C for AIX 4 :
#include <stdio.h>
#define LMTSIZE 32000 /*调用时参数的大小*/
typedef struct {
char sParam[LMTSIZE+1];
int iVal;
} CS ;
void funCallByVal(), funCallByRef();
main()
{
CS cs;
memset(cs.sParam, 'A', LMTSIZE);
cs.sParam[LMTSIZE-1]='B';
cs.iVal=12345;
funCallByVal(cs);
funCallByRef(&cs);
}
void funCallByVal(CS stVal)
{
printf("Call By Val:iVal=%d,stParam[%d]=%c \n",
stVal.iVal, LMTSIZE-1, stVal.sParam[LMTSIZE-1]);
}
void funCallByRef(CS *stRef)
{
printf("Call By Ref:iVal=%d,stParam[%d]=%c \n",
stRef->iVal, LMTSIZE-1,stRef->sParam[LMTSIZE-1]);
}
编译:cc -go file1 file1.c
当我设定LMTSIZE为32000时,执行结果为:
Call By Val:iVal=12345,stParam[31999]=B
Call By Ref:iVal=12345,stParam[31999]=B
结果正确。
而设定LMTSIZE为33000及以上时,执行结果为:
Call By Val:iVal=1094795585,stParam[32999]=A
Call By Ref:iVal=12345,stParam[32999]=B
结果是错误的!
参数的大小只能在32768以下,而我的stack为32768K.将问题反映到IBM技术支持部去,他们说在C for AIX 5的版本上是正确的.
看网上有没有高手能解决问题!!