※ 引述《noguest.bbs@ptt.cc (guest)》之銘言:
> 以下面這個簡單地程式為例:
> const int a=10; (或是 #define a 10)
> int b=0;
> ...
> b+=a;
以下是這段程式館碼在VC7中compile的結果:
使用const時:
00401006 |. C745 FC 0A0000>MOV DWORD PTR SS:[EBP-4],0A
0040100D |. C745 F8 000000>MOV DWORD PTR SS:[EBP-8],0
00401014 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00401017 |. 83C0 0A ADD EAX,0A
0040101A |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
使用#define時:
00401004 |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
0040100B |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0040100E |. 83C0 0A ADD EAX,0A
00401011 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
沒有完成在全域最佳化(/Og)下的測試, 因為找不到進入點...
或許遲一點再做吧...
不過在沒有用最佳化時, const宣告明顯地多了一行在這裡沒有用處的指令.
也就是說, 當用const宣告時, 即使你沒有用到該值也會佔位置.
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: ip-84-126-134-202.rev.dyxnet.com