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

内核编译和嵌入式产品的设计与开发
回复
qw4990
帖子: 10
注册时间: 2014-03-01 21:51
系统: ubuntu 13.10

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

#1

帖子 qw4990 » 2014-03-18 21:47

请问一下一般函数的参数传递都是从右到左的被压入堆栈区,
这样的话左边的参数地址值应该更小,右边的应该更大,而且参数之前的地址差值应该为参数类型的长度才对,
但是我实际试的时候却有偏差。。 下面图一个是windows的 一个是ubuntu的,程序代码都一模一样,windows的结果是预期的,
但是ubuntu上面的结果却不一样,求解。。
图片
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#2

帖子 eexpress » 2014-03-18 22:18

看不到图。。。
传参数,和编译器直接有关,你不能直接比啥的。
● 鸣学
qw4990
帖子: 10
注册时间: 2014-03-01 21:51
系统: ubuntu 13.10

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

#3

帖子 qw4990 » 2014-03-19 10:50

eexpress 写了:看不到图。。。
传参数,和编译器直接有关,你不能直接比啥的。
感谢了,没想到还和编译器有关系。。

还有一个问题就是
我用long long测试的时候 两个间隔变量的地址差为8 对应longlong占8个字节
int测试的地址差是4 int占4个字节
但是用char测试的时候 地址差也是4 按照常理说 char的只占1个字节 地址差应该是1才对吧?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#4

帖子 eexpress » 2014-03-19 11:02

char在32位系统上,有可能就默认是int长度了。有些编译器还需要专门设置char的长度。
● 鸣学
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

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

#5

帖子 YeLee » 2014-03-19 11:51

gcc按4位内存地址对齐的吧,不过只知道int在不同机器上会出现差距,char一直都是1 字节的吧。另,ee说的那是编码的长度吧,跟locale相关而已,与这些无关的。 :em01
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
回复