亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12
最近訪問板塊 發(fā)新帖
樓主: cao627
打印 上一主題 下一主題

[C] c語言函數(shù)形參的地址關系 [復制鏈接]

論壇徽章:
36
CU大;照
日期:2013-09-18 15:24:20NBA常規(guī)賽紀念章
日期:2015-05-04 22:32:03牛市紀念徽章
日期:2015-07-24 12:48:5515-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-30 09:26:4715-16賽季CBA聯(lián)賽之北控
日期:2016-03-30 11:26:2315-16賽季CBA聯(lián)賽之廣夏
日期:2016-05-20 15:46:5715-16賽季CBA聯(lián)賽之吉林
日期:2016-05-24 11:38:0615-16賽季CBA聯(lián)賽之青島
日期:2016-05-30 13:41:3215-16賽季CBA聯(lián)賽之同曦
日期:2016-06-23 16:41:052015年亞洲杯之巴林
日期:2015-02-03 15:05:04CU大;照
日期:2013-09-18 15:24:52CU十二周年紀念徽章
日期:2013-10-24 15:46:53
11 [報告]
發(fā)表于 2015-01-04 17:26 |只看該作者
回復 10# zhaohongjian000


    不明白什么叫“用內(nèi)存?zhèn)鲄?shù)”,怎么理解?

論壇徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辭舊歲徽章
日期:2015-03-03 16:54:152015年亞洲杯之約旦
日期:2015-02-11 14:38:37雙魚座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29雙子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亞洲杯之科威特
日期:2015-04-17 16:51:51
12 [報告]
發(fā)表于 2015-01-04 17:29 |只看該作者
回復 11# idi0t


    就是把參數(shù)放內(nèi)存里啊。一般就是放在stack上,從右向左。這么做的原因是為了支持可變參數(shù)的函數(shù),因為第一個參數(shù)的地址是在頂部。

論壇徽章:
36
CU大;照
日期:2013-09-18 15:24:20NBA常規(guī)賽紀念章
日期:2015-05-04 22:32:03牛市紀念徽章
日期:2015-07-24 12:48:5515-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-30 09:26:4715-16賽季CBA聯(lián)賽之北控
日期:2016-03-30 11:26:2315-16賽季CBA聯(lián)賽之廣夏
日期:2016-05-20 15:46:5715-16賽季CBA聯(lián)賽之吉林
日期:2016-05-24 11:38:0615-16賽季CBA聯(lián)賽之青島
日期:2016-05-30 13:41:3215-16賽季CBA聯(lián)賽之同曦
日期:2016-06-23 16:41:052015年亞洲杯之巴林
日期:2015-02-03 15:05:04CU大;照
日期:2013-09-18 15:24:52CU十二周年紀念徽章
日期:2013-10-24 15:46:53
13 [報告]
發(fā)表于 2015-01-05 09:14 |只看該作者
回復 12# zhaohongjian000


    那為什么說“簡單的說,現(xiàn)在還在用內(nèi)存?zhèn)鲄?shù)的,只有32位的x86了”,其它的是怎么傳的呢,能否簡單說下。

論壇徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辭舊歲徽章
日期:2015-03-03 16:54:152015年亞洲杯之約旦
日期:2015-02-11 14:38:37雙魚座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29雙子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亞洲杯之科威特
日期:2015-04-17 16:51:51
14 [報告]
發(fā)表于 2015-01-05 11:05 |只看該作者
回復 13# idi0t

放寄存器里。比如用8個寄存器用于參數(shù)傳遞,從左到右依次放到1到8號寄存器中。超過8個參數(shù)再使用內(nèi)存。返回值放到第一個寄存器中。
當返回值尺寸比較大時(比如返回結構體),有的ABI規(guī)定由caller分配內(nèi)存存放返回值,并把地址作為額外參數(shù)傳遞給callee。

有浮點運算部件的情況下,浮點參數(shù)一般是單獨放在浮點部件的寄存器中的。

總體方法都大體相似,但具體細節(jié)非常多。單單調(diào)用約定這一塊可能就有幾十種特殊情況。你可以找個ABI規(guī)范看一下,比如AMD64的。


x86(32位)的情況比較復雜,因為在發(fā)展早期沒有確定一個統(tǒng)一的ABI規(guī)范。各個編譯器、系統(tǒng)遵循的ABI都可能不一樣。而且由于多個編譯器在
x86(32位)上都采用棧來傳遞參數(shù),讓很多不明所以的人誤認為參數(shù)天生就是要通過棧來傳遞的。

論壇徽章:
15
射手座
日期:2014-11-29 19:22:4915-16賽季CBA聯(lián)賽之青島
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16賽季CBA聯(lián)賽之四川
日期:2017-02-07 21:08:572015年亞冠紀念徽章
日期:2015-11-06 12:31:58每日論壇發(fā)貼之星
日期:2015-08-04 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-08-04 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-07-12 22:20:002015亞冠之浦和紅鉆
日期:2015-07-08 10:10:132015亞冠之大阪鋼巴
日期:2015-06-29 11:21:122015亞冠之廣州恒大
日期:2015-05-22 21:55:412015年亞洲杯之伊朗
日期:2015-04-10 16:28:25
15 [報告]
發(fā)表于 2015-01-05 15:35 |只看該作者
cao627 發(fā)表于 2015-01-03 10:34
看到一個視頻教程,里面用test2實現(xiàn)了:打印第二個參數(shù)和第三個參數(shù)的值,依據(jù)是形參的地址在內(nèi)存里緊挨著的 ...

X64,前6個形參在寄存器,你上哪兒找地址?
學一下ABI。

論壇徽章:
36
CU大;照
日期:2013-09-18 15:24:20NBA常規(guī)賽紀念章
日期:2015-05-04 22:32:03牛市紀念徽章
日期:2015-07-24 12:48:5515-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-30 09:26:4715-16賽季CBA聯(lián)賽之北控
日期:2016-03-30 11:26:2315-16賽季CBA聯(lián)賽之廣夏
日期:2016-05-20 15:46:5715-16賽季CBA聯(lián)賽之吉林
日期:2016-05-24 11:38:0615-16賽季CBA聯(lián)賽之青島
日期:2016-05-30 13:41:3215-16賽季CBA聯(lián)賽之同曦
日期:2016-06-23 16:41:052015年亞洲杯之巴林
日期:2015-02-03 15:05:04CU大;照
日期:2013-09-18 15:24:52CU十二周年紀念徽章
日期:2013-10-24 15:46:53
16 [報告]
發(fā)表于 2015-01-05 15:53 |只看該作者
回復 14# zhaohongjian000


    恩,謝謝解釋,沒接觸過64位的,學習了,突然之前無意中看過別人反匯編arm平臺下的程序好像也是用寄存器傳的。

論壇徽章:
5
戌狗
日期:2014-06-09 10:29:10酉雞
日期:2014-12-01 16:05:27處女座
日期:2015-01-07 18:35:262015亞冠之水原三星
日期:2015-06-03 09:26:222015亞冠之布里斯班獅吼
日期:2015-06-15 10:53:54
17 [報告]
發(fā)表于 2015-01-05 16:39 |只看該作者
LZ,有結果了嗎?我在我的環(huán)境下試了一下你的程序,調(diào)試如下:
  1. GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-51.el7
  2. Copyright (C) 2013 Free Software Foundation, Inc.
  3. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
  4. This is free software: you are free to change and redistribute it.
  5. There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
  6. and "show warranty" for details.
  7. This GDB was configured as "x86_64-redhat-linux-gnu".
  8. For bug reporting instructions, please see:
  9. <http://www.gnu.org/software/gdb/bugs/>...
  10. Reading symbols from /root/Project/programing/C/a.out...done.
  11. (gdb) b test2
  12. Breakpoint 1 at 0x4005f3: file func_args.c, line 16.
  13. (gdb) r
  14. Starting program: /root/Project/programing/C/a.out
  15. 100
  16. 200
  17. 300

  18. Breakpoint 1, test2 (s=0x400714 "hello world") at func_args.c:16
  19. 16                p = (int *)&s;
  20. Missing separate debuginfos, use: debuginfo-install glibc-2.17-55.el7.x86_64
  21. (gdb) n
  22. 17                p++;
  23. (gdb) p p
  24. $1 = (int *) 0x7fffffffdfa8
  25. (gdb) p *(p+8)
  26. $2 = 100
  27. (gdb) p *(p+10)
  28. $3 = 200
  29. (gdb) n
  30. 18                printf("%d\n", *p);
  31. (gdb) p p
  32. $4 = (int *) 0x7fffffffdfac
復制代碼
真心沒想明白阿
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP