august 发表于 2007-8-15 15:35:41

提问---register

1.
void main()
{
register int i;
int tmp=0;
for(i=1;i<=100;i++)
tmp+=i;
printf("The sum is %d\n",tmp);
}
请问这个程序意义何在呢?

2.printf("\40:please input number=>");
\40 是什么转义呢?相当于空格吗?

Zelsazgh 发表于 2007-8-15 18:40:23

在通用转义符下....数字是八进制表示....40也就是十进制的32....转成ASCII就是空格...以上

Zelsazgh 发表于 2007-8-15 18:41:45

另外\\0XXX,是十六进制表示的说...详细内容请查阅C++ Primer

coolpay64 发表于 2007-8-15 20:05:00

沒記錯了,register是萬惡的根源

一般來說,變量也是存放在RAM內的
可能有人會問[不放在RAM還可以放在那裡]
事實上玩過Assembly(組合語言,匯編語言)的也知道其實CPU內部也有一此儲存空間名為Register
一般的變數的讀寫過程是由Ram讀入Register以內,計算後便由Register寫回Ram中
如果在C中把物變數宣告成register模式,C Compiler(編譯器)便會盡可能把該變數放在Register之中
以減少讀寫RAM的時間,變相加快程式執行的進度

有一些新手聽過之後便開始瘋狂使用register,但十分不幸的,CPU中的Register數目是少得可憐的
同時開十個register變數,很有可能大部份的變數已不在register之內
更進一步是register給霸佔了,結果其他程式的讀寫便變得更慢

john_he 发表于 2007-8-16 11:49:42

补充楼上的,register(寄存器)是临时数据交换的必需,例如EAX一般是用来存放数学运算的操作数和函数返回值等,访问寄存器比内存快几个数量级,CPU几乎全部操作都需要使用到寄存器。如楼上所说,寄存器的数量是十分少的,至于具体数量取决于不同的CPU,我们一般使用的x86 CPU,编译器能使用到的就8个,而且有两个是几乎不能碰的(ESP、EBP,负责管理堆栈),有一个是数学运算必须的(EAX),一般要用register变量也就是做数学运算,所以说只有5个寄存器是可用的,实际根据不同的程序和编译器,数量就更少了。另外,不同编译器在编译时会根据实际情况把读写得多的变量自动放到寄存器里,例如for循环的记数变量一般会放到ECX里,用不着用户操心。另外,根据ANSI标准,编译器可以选择忽略register关键字,因此具体能起多大作用也是未知数。

一般来说,用户(特别是新手)不用使用这个关键字,就算使用也要注意场合,例如做循环记数变量、局部使用的指针等。

FantasyDR 发表于 2007-8-16 22:38:00

很好奇lz在看什么书。
强烈建议看转看c++ primer

coolpay64 发表于 2007-8-17 10:46:09

某已經問過這個問題..XD
页: [1]
查看完整版本: 提问---register