分页: 1 / 1

ubuntu函数参数传递的一个问题

发表于 : 2014-03-18 21:47
qw4990
请问一下一般函数的参数传递都是从右到左的被压入堆栈区,
这样的话左边的参数地址值应该更小,右边的应该更大,而且参数之前的地址差值应该为参数类型的长度才对,
但是我实际试的时候却有偏差。。 下面图一个是windows的 一个是ubuntu的,程序代码都一模一样,windows的结果是预期的,
但是ubuntu上面的结果却不一样,求解。。
图片

Re: ubuntu函数参数传递的一个问题

发表于 : 2014-03-18 22:18
eexpress
看不到图。。。
传参数,和编译器直接有关,你不能直接比啥的。

Re: ubuntu函数参数传递的一个问题

发表于 : 2014-03-19 10:50
qw4990
eexpress 写了:看不到图。。。
传参数,和编译器直接有关,你不能直接比啥的。
感谢了,没想到还和编译器有关系。。

还有一个问题就是
我用long long测试的时候 两个间隔变量的地址差为8 对应longlong占8个字节
int测试的地址差是4 int占4个字节
但是用char测试的时候 地址差也是4 按照常理说 char的只占1个字节 地址差应该是1才对吧?

Re: ubuntu函数参数传递的一个问题

发表于 : 2014-03-19 11:02
eexpress
char在32位系统上,有可能就默认是int长度了。有些编译器还需要专门设置char的长度。

Re: ubuntu函数参数传递的一个问题

发表于 : 2014-03-19 11:51
YeLee
gcc按4位内存地址对齐的吧,不过只知道int在不同机器上会出现差距,char一直都是1 字节的吧。另,ee说的那是编码的长度吧,跟locale相关而已,与这些无关的。 :em01