2010年1月3日 星期日

Stickies

Stickies
類似ATnotes,不過仍在開發,且有中文化。

Link Options - Using the GNU Compiler Collection (GCC)

Link Options - Using the GNU Compiler Collection (GCC)

3.13 Options for Linking

These options come into play when the compiler links object files into an executable output file. They are meaningless if the compiler is not doing a link step.
object-file-name
A file name that does not end in a special recognized suffix is considered to name an object file or library. (Object files are distinguished from libraries by the linker according to the file contents.) If linking is done, these object files are used as input to the linker.
-c
-S
-E
If any of these options is used, then the linker is not run, and object file names should not be used as arguments. See Overall Options.
-llibrary
-l library
Search the library named library when linking. (The second alternative with the library as a separate argument is only for POSIX compliance and is not recommended.)
It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, `foo.o -lz bar.o' searches library `z' after file foo.o but before bar.o. If bar.o refers to functions in `z', those functions may not be loaded.
The linker searches a standard list of directories for the library, which is actually a file named liblibrary.a. The linker then uses this file as if it had been specified precisely by name.
The directories searched include several standard system directories plus any that you specify with -L.
Normally the files found this way are library files—archive files whose members are object files. The linker handles an archive file by scanning through it for members which define symbols that have so far been referenced but not defined. But if the file that is found is an ordinary object file, it is linked in the usual fashion. The only difference between using an -l option and specifying a file name is that -l surrounds library with `lib' and `.a' and searches several directories.
-lobjc
You need this special case of the -l option in order to link an Objective-C or Objective-C++ program.
-nostartfiles
Do not use the standard system startup files when linking. The standard system libraries are used normally, unless -nostdlib or -nodefaultlibs is used.
-nodefaultlibs
Do not use the standard system libraries when linking. Only the libraries you specify will be passed to the linker, options specifying linkage of the system libraries, such as -static-libgcc or -shared-libgcc, will be ignored. The standard startup files are used normally, unless -nostartfiles is used. The compiler may generate calls to memcmp, memset, memcpy and memmove. These entries are usually resolved by entries in libc. These entry points should be supplied through some other mechanism when this option is specified.
-nostdlib
Do not use the standard system startup files or libraries when linking. No startup files and only the libraries you specify will be passed to the linker, options specifying linkage of the system libraries, such as -static-libgcc or -shared-libgcc, will be ignored. The compiler may generate calls to memcmp, memset, memcpy and memmove. These entries are usually resolved by entries in libc. These entry points should be supplied through some other mechanism when this option is specified. One of the standard libraries bypassed by -nostdlib and -nodefaultlibs is libgcc.a, a library of internal subroutines that GCC uses to overcome shortcomings of particular machines, or special needs for some languages. (See Interfacing to GCC Output, for more discussion of libgcc.a.) In most cases, you need libgcc.a even when you want to avoid other standard libraries. In other words, when you specify -nostdlib or -nodefaultlibs you should usually specify -lgcc as well. This ensures that you have no unresolved references to internal GCC library subroutines. (For example, `__main', used to ensure C++ constructors will be called; see collect2.)
-pie
Produce a position independent executable on targets which support it. For predictable results, you must also specify the same set of options that were used to generate code (-fpie, -fPIE, or model suboptions) when you specify this option.
-rdynamic
Pass the flag -export-dynamic to the ELF linker, on targets that support it. This instructs the linker to add all symbols, not only used ones, to the dynamic symbol table. This option is needed for some uses of dlopen or to allow obtaining backtraces from within a program.
-s
Remove all symbol table and relocation information from the executable.
-static
On systems that support dynamic linking, this prevents linking with the shared libraries. On other systems, this option has no effect.
-shared
Produce a shared object which can then be linked with other objects to form an executable. Not all systems support this option. For predictable results, you must also specify the same set of options that were used to generate code (-fpic, -fPIC, or model suboptions) when you specify this option.1
-shared-libgcc
-static-libgcc
On systems that provide libgcc as a shared library, these options force the use of either the shared or static version respectively. If no shared version of libgcc was built when the compiler was configured, these options have no effect. There are several situations in which an application should use the shared libgcc instead of the static version. The most common of these is when the application wishes to throw and catch exceptions across different shared libraries. In that case, each of the libraries as well as the application itself should use the shared libgcc. Therefore, the G++ and GCJ drivers automatically add -shared-libgcc whenever you build a shared library or a main executable, because C++ and Java programs typically use exceptions, so this is the right thing to do. If, instead, you use the GCC driver to create shared libraries, you may find that they will not always be linked with the shared libgcc. If GCC finds, at its configuration time, that you have a non-GNU linker or a GNU linker that does not support option --eh-frame-hdr, it will link the shared version of libgcc into shared libraries by default. Otherwise, it will take advantage of the linker and optimize away the linking with the shared version of libgcc, linking with the static version of libgcc by default. This allows exceptions to propagate through such shared libraries, without incurring relocation costs at library load time. However, if a library or main executable is supposed to throw or catch exceptions, you must link it using the G++ or GCJ driver, as appropriate for the languages used in the program, or using the option -shared-libgcc, such that it is linked with the shared libgcc.
-static-libstdc++
When the g++ program is used to link a C++ program, it will normally automatically link against libstdc++. If libstdc++ is available as a shared library, and the -static option is not used, then this will link against the shared version of libstdc++. That is normally fine. However, it is sometimes useful to freeze the version of libstdc++ used by the program without going all the way to a fully static link. The -static-libstdc++ option directs the g++ driver to link libstdc++ statically, without necessarily linking other libraries statically.
-symbolic
Bind references to global symbols when building a shared object. Warn about any unresolved references (unless overridden by the link editor option `-Xlinker -z -Xlinker defs'). Only a few systems support this option.
-T script
Use script as the linker script. This option is supported by most systems using the GNU linker. On some targets, such as bare-board targets without an operating system, the -T option may be required when linking to avoid references to undefined symbols.
-Xlinker option
Pass option as an option to the linker. You can use this to supply system-specific linker options which GCC does not know how to recognize. If you want to pass an option that takes a separate argument, you must use -Xlinker twice, once for the option and once for the argument. For example, to pass -assert definitions, you must write `-Xlinker -assert -Xlinker definitions'. It does not work to write -Xlinker "-assert definitions", because this passes the entire string as a single argument, which is not what the linker expects. When using the GNU linker, it is usually more convenient to pass arguments to linker options using the option=value syntax than as separate arguments. For example, you can specify `-Xlinker -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'. Other linkers may not support this syntax for command-line options.
-Wl,option
Pass option as an option to the linker. If option contains commas, it is split into multiple options at the commas. You can use this syntax to pass an argument to the option. For example, `-Wl,-Map,output.map' passes `-Map output.map' to the linker. When using the GNU linker, you can also get the same effect with `-Wl,-Map=output.map'.
-u symbol
Pretend the symbol symbol is undefined, to force linking of library modules to define it. You can use -u multiple times with different symbols to force loading of additional library modules.

Footnotes

[1] On some systems, `gcc -shared' needs to build supplementary stub code for constructors to work. On multi-libbed systems, `gcc -shared' must select the correct support libraries to link against. Failing to supply the correct flags may lead to subtle defects. Supplying them in cases where they are not necessary is innocuous.

2010年1月1日 星期五

思樂康存在嚴重副作用!日本接到13例報告

思樂康存在嚴重副作用!日本接到13例報告

思樂康存在嚴重副作用!日本接到13例報告

2002/11/11 09:07
日本厚生勞動省11月7日要求英國阿斯利康(AstraZeneca)公佈其製造的“思樂康(Seroquel)片劑”(專業名稱:富馬酸奎的平)的緊急 安全資訊。因為,儘管該藥於今年7月上市後因接到副作用報告、在藥品的“其他副作用”一欄中追加了“高血糖”,並提請醫務人員加以注意。但其後卻再次接到 糖尿病酮症酸中毒(Diabetic Detoacidosis)等症狀的報告。這是抗精神病藥在日本繼今年4月的“Zyprexa片劑”(專業名稱:奧氮平Olanzapine)之後,第二 種因糖代謝相關副作用而被要求公佈緊急完全資訊的藥物。

富馬酸奎的平自今年2月開始上市至今,共收到13例出現高血糖、糖尿病酮症酸中毒和糖尿病昏迷(Diabetic Coma)等症狀的報告。其中1例已經死亡。

據此,將在藥品說明書附帶的“禁忌”欄中追加“禁止向糖尿病患者及有糖尿病病史的患者給藥”。另外,還建議“在給藥過程中,要充分進行血糖值 的測定等觀察,一旦出現異常,立刻停止用藥,並採取適當醫療措施”,“在給藥的時候,要向患者及其家屬充分告知可能出現這些副作用,並指導他們當出現口渴 等高血糖症狀時,應立即停止服用,並到醫療機構接受檢查”。

該藥于去年12月在日本批准上市,今年2月由藤澤藥品工業代理銷售。主要適用於綜合性功能紊亂症(精神分裂症),截止2002年9月,估計使用患者人數約13萬人。

extern 和 C/C++,C++技術文章,C++系列教程,C++

extern 和 C/C++,C++技術文章,C++系列教程,C++

1、 聲明外部變量

現代編譯器一般採用按文件編譯的方式,因此在編譯時,各個文件中定義的全局變量是
互相透明的,也就是說,在編譯時,全局變量的可見域限制在文件內部。下面舉一個簡單的例子。創建一個工程,裡面含有A.cpp和B.cpp兩個簡單的C++源文件:

//A.cpp
int i;
void main()
{
}


//B.cpp
int i;


這兩個文件極為簡單,在A.cpp中我們定義了一個全局變量i,在B中我們也定義了一個全局變量i。我們對A和B分別編譯,都可以正常通過編譯,但是進行鏈接的時候,卻出現了錯誤,錯誤提示如下:
Linking...
B.obj : error LNK2005: "int i" (
?i@@3HA) already defined in A.obj
Debug/A.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

A.exe - 2 error(s), 0 warning(s)

這就是說,在編譯階段,各個文件中定義的全局變量相互是透明的,編譯A時覺察不到B中也定義了i,同樣,編譯B時覺察不到A中也定義了i。但是到了鏈接階 段,要將各個文件的內容「合為一體」,因此,如果某些文件中定義的全局變量名相同的話,在這個時候就會出現錯誤,也就是上面提示的重複定義的錯誤。因此, 各個文件中定義的全局變量名不可相同。
在鏈接階段,各個文件的內容(實際是編譯產生的obj文件)是被合併到一起的,因而,定義於某文件內的全局變量,在鏈接完成後,它的可見範圍被擴大到了整 個程序。這樣一來,按道理說,一個文件中定義的全局變量,可以在整個程序的任何地方被使用,舉例說,如果A文件中定義了某全局變量,那麼B文件中應可以使 用該變量。修改我們的程序,加以驗證:
//A.cpp

void main()
{
i = 100; //試圖使用B中定義的全局變量
}
//B.cpp
int i;


編譯結果如下:
Compiling...
A.cpp
C:\Documents and Settings\wangjian\桌面\try extern\A.cpp(5) : error C2065: 'i' : undeclared identifier
Error executing cl.exe.

A.obj - 1 error(s), 0 warning(s)

編譯錯誤。
其實出現這個錯誤是意料之中的,因為:文件中定義的全局變量的可見性擴展到整個程序是在鏈接完成之後,而在編譯階段,他們的可見性仍侷限於各自的文件。編 譯器的目光不夠長遠,編譯器沒有能夠意識到,某個變量符號雖然不是本文件定義的,但是它可能是在其它的文件中定義的。雖然編譯器不夠遠見,但是我們可以給 它提示,幫助它來解決上面出現的問題。這就是extern的作用了。
extern的原理很簡單,就是告訴編譯器:「你現在編譯的文件中,有一個標識符雖然沒有在本文件中定義,但是它是在別的文件中定義的全局變量,你要放行!」我們為上面的錯誤程序加上extern關鍵字:
//A.cpp

extern int i;
void main()
{
i = 100; //試圖使用B中定義的全局變量
}


//B.cpp
int i;


順利通過編譯,鏈接。

2、 在C++文件中調用C方式編譯的函數

C方式編譯和C++方式編譯
相對於C,C++中新增了諸如重載等新特性,對於他們的編譯,必然有一些重要的區別。
我們將下面的小程序分別按C和C++方式編譯,來探討兩種編譯方式的區別。
int i;

int func(int t)
{
return 0;
}

void main()
{
}


以C方式編譯的結果:
COMM _i : DWORD

PUBLIC _func
PUBLIC _main

以C++方式編譯的結果:
PUBLIC
?i@@3HA ; i
PUBLIC ?func@@YAHH@Z ; func
PUBLIC _main

可見,C方式編譯下,變量名和函數名之前被統一加上了一個下劃線,而C++編譯後的結果卻複雜的多,i變成了?i@@3HA,func變成了?func@@YAHH@Z。C++中的這種看似複雜的命名規則是為C++中的函數重載,參數檢查等特性服務的。

多文件程序中的函數調用一般情況下,工程中的文件都是CPP文件(以及頭文件)。如下面的程序僅包含兩個文件:A.CPP和B.CPP:
//A.CPP
void func();

void main()
{
func();
}


//B.CPP
void func()
{
}


程序的結構是這樣的:在文件B.CPP中定義了一個函數void func(),main函數位於文件A.CPP,在main函數中調用了B中定義的函數func()。要在A中調用B中定義的函數,必須要加上該函數的聲 明。如本例中的void func();就是對函數func()的聲明。如果沒有聲明的話,編譯A.CPP時就會出錯。因為編譯器的目光只侷限於被編譯文件,必須通過加入函數聲明 來告訴編譯器:「某個函數是定義在其它的文件中的,你要放行!」,這一點跟用extern來聲明外部全局變量是一個道理。

需要注意的是,一般的程序都是通過包含頭文件來完成函數的聲明。拿本例來說,一般是創建一個頭文件B.H,在頭文件中加入聲明語句void func(); 並且在A.CPP中加入包含語句:#include 「B.H」。在C++程序中,頭文件的功能從函數聲明被擴展為類的定義。


不同編譯方式下的函數調用。如果在工程中,不僅有CPP文件,還有以C方式編譯的C文件,函數調用就會有一些微妙之處。我們將B.CPP改作B.C:
//A.CPP
void func();

void main()
{
func();
}


//B.C
void func()
{
}


對A.CPP和B.C分別編譯,都沒有問題,但是鏈接時出現錯誤。
Linking...
A.obj : error LNK2001: unresolved external symbol "void __cdecl func(void)" (
?func@@YAXXZ)
Debug/A.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

A.exe - 2 error(s), 0 warning(s)

原因就在於不同的編譯方式產生的衝突。
對於文件A,是按照C++的方式進行編譯的,其中的func()調用被編譯成了call
?func1@@YAXXZ。如果B文件也是按照C++方式編譯的,那麼B中的func函數名也會被編譯器改成?func1@@YAXXZ,這樣的話,就沒有任何問題。
但是現在對B文件,是按照C方式編譯的,B中的func函數名被改成了_func,這樣一來,A中的call
?func1@@YAXXZ這個函數調用就沒有了著落,因為在鏈接器看來,B文件中沒有名為?func1@@YAXXZ的函數。
事實是,我們編程者知道,B文件中有A中調用的func函數的定義,只不過它是按照C方式編譯的,故它的名字被改成了_func。因而,我們需要通過某種方式告訴編譯器:「B中定義的函數func()經編譯後命名成了_func,而不是
?func1@@YAXXZ,你必須通過call _func來調用它,而不是call ?func1@@YAXXZ。」簡單的說,就是告訴編譯器,調用的func()函數是以C方式編譯的,fun();語句必須被編譯成call _func;而不是call ?func1@@YAXXZ
我們可以通過extern關鍵字,來幫助編譯器解決上面提到的問題。
對於本例,只需將A.CPP改成如下即可:
//A.CPP
extern "C"
{
void func();
}
void main()
{
func();
}


察看彙編代碼,發現此時的func();語句被編譯成了call _func。

3、 補充

同2一樣,仍然是C,C++混合編程的情形,考慮下面的程序:
//A.CPP
extern int i;

void main()
{
i = 100;
}


//B.C
int i;


程序很簡單:在文件B.C中定義了一個全局變量i,在A.CPP中使用了這個全局變量。
編譯沒有問題,鏈接時卻出現錯誤:
Linking...
A.obj : error LNK2001: unresolved external symbol "int i" (
?i@@3HA)
Debug/A.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

A.exe - 2 error(s), 0 warning(s)

這是因為,在C方式編譯下,i被重命名為_i,而在C++方式下,i會被重命名為
?i@@3HA
因而,我們只用extern int i;來聲明還不夠,必須告訴編譯器,全局變量i是以C方式編譯的,它會被重命名為_i,而不是
?i@@3HA。我們修改A.CPP,如下:
//A.CPP

extern "C"
{
int i;
}
void main()
{

i = 100;
}


程序正常通過編譯和鏈接。我們察看一下彙編代碼,發現語句i = 100;被編譯成了mov DWORD PTR _i, 100。

2009年12月29日 星期二

直系血親不宜輸血? 偶像劇演對了-Yahoo!奇摩新聞

直系血親不宜輸血? 偶像劇演對了-Yahoo!奇摩新聞:
更新日期:2009/12/29 04:11
〔記者洪素卿/台北報導〕偶像劇「下一站,幸福」劇情漸入高潮,週日播出的最新一集,劇中醫師一句「直系血親不能輸血」,讓女主角安以軒及時阻止仍不知道自己是小孩生父的吳建豪輸血給小小彬,也引發戲迷們熱烈討論,此話究竟是否真有科學根據?
對此,醫師表示,偶像劇的編劇沒有寫錯,直系血親間輸血確實可能要命!
網友認為編劇鬼扯 引發熱烈討論
偶 像劇「下一站,幸福」,週日播出由小小彬飾演的「梁小樂」,從階梯上跌下來受傷流血,送醫急救需要輸血的橋段,安以軒飾演的媽媽欲捐血給兒子,遭劇中醫生 以「直系血親不能輸血給自己小孩」為由婉拒;緊接著吳建豪飾演的「任光晞」便表示自己血型相同願意捐血,但由於他就是孩子生父,使得孩子的媽媽脫口而出 「不能捐」,並向醫師使眼色求救。
雖然部分網友認為這又是一個常見的血型認親橋段,不過,網路上卻意外引發不少戲迷討論為什麼直系血親不能輸血?有人認為是編劇鬼扯,還有人說自己曾接受過父親輸血並沒有問題,甚至有網友推論其實是劇中醫師、亦即第二女主角為了試探男主角是不是孩子的爹。
不過,國內血液醫學專家、馬偕醫院林媽利醫師及台北榮民總醫院血液腫瘤科主治醫師邱宗傑均表示,編劇並沒有寫錯,直系血親間輸血確實可能引發「移植物抗宿主」的嚴重疾病。
醫師:可能引發移植物抗宿主疾病
林媽利解釋,某些家庭因其親子間的基因型態組合非常特別,以至於直系血親間輸血時,輸入患者體內的血液,反而對患者發動攻擊,就像是「乞丐趕廟公」一樣,導致嚴重致命反應。
雖說台灣約莫只有二%家庭有這類基因組合,且這些家庭發生「移植物抗宿主」疾病的機率也只有一%,但因一旦發生就無藥可解,且死亡率非常高,仍然不可不防。
以放射線照射血液 才能輸給患者
如果真的一時找不到其他血液,只剩直系血親能緊急輸血時,也不是完全沒有解套方法。林媽利指出,只要先將要輸給患者的血液以放射線照射,讓血液中可能對患者發動攻擊的淋巴球不能作怪,再輸入患者體內即可。
林媽利說,除了這類嚴重致命疾病外,由於多數人不見得清楚自己是否有潛在疾病,因此親屬間緊急輸血,並不比已經檢驗過關的血液更安全。

植完牙未回診 男子滿嘴黑牙-Yahoo!奇摩新聞

植完牙未回診 男子滿嘴黑牙-Yahoo!奇摩新聞

植完牙未回診 男子滿嘴黑牙

更新日期:2009/12/29 16:46

植牙可不是植完就沒事了,台南有一名男子在七年前植牙後,就沒有再回診過,直到最近植牙脫落,逼不得已回去看醫生,才發現他的植牙,全都佈滿黑黑的組織,看起來好像刺刺的狼牙棒,醫生說這都是沒有回診檢查的後果。
這 黑黑髒髒,長的像可怕狼牙棒的刺刺物體,居然就長在黃姓男子的植牙裡,想起來還怕怕的,討厭看醫生的黃先生,七年前在下方門牙植入了六顆牙齒後,再也沒有 回到牙醫診所複診,就算牙齒會痛也是忍一忍就算了,結果這一忍,忍出了大麻煩,他發現右邊的三顆植牙開始鬆動,還發出惡臭,只好回到牙醫診所,當醫生把鬆 動植牙拔下來時,他嚇傻了眼。
本以為堅固的植牙變成這副德行,黑黑刺刺的組織爬滿了植體,上面還搖搖欲墜的黏著一顆植牙,怎麼會變成這樣, 醫生說這是慢性細菌感染,因為植牙後沒有回到診所做深層清潔,才會變成這麼嚴重的後果,現在黃先生不但之前做的植牙全毀,還要接受長期治療才能再植牙,醫 生也提醒民眾植牙,一定要回到診所檢查,要不然就會像黃先生一樣,花大錢植牙,卻換來滿口爛牙。(完整影音新聞請 見:http://news.cts.com.tw/cts/life/200912/200912290376947.html)

An ellipsis at the end of the parameter

An ellipsis at the end of the parameter specifications is used to specify that a function has a variable number of parameters. The number of parameters is equal to, or greater than, the number of parameter specifications.
int f(int, ...);
C++ The comma before the ellipsis is optional. In addition, a parameter declaration is not required before the ellipsis.
C At least one parameter declaration, as well as a comma before the ellipsis, are both required in C.

C: Ellipsis operator (…) : printf « Programming in Linux

C: Ellipsis operator (…) : printf « Programming in Linux

C: Ellipsis operator (…) : printf

For more updates, check Programming Insights.
Ever imagined how printf works, even though we are able to pass a number of arguments to it. If we design a function which takes two arguments and pass three parameters, we are bound to get this error “too many arguments to function”i.e., suppose we have a function
int fun2(int a, int b)
and we call the function
fun2(2,3,4)
we are sure to get the above error. So the question is how printf / scanf works with variable number of arguments? This is because C has a feature called ellipsis (…) by which you are able to pass variable number of arguments?
So the prototype of printf is
int printf(const char *str,...)
But the next question is how then can we access the arguments in the function. This can be done by the power of pointers. Let’s take a pointer which points to the last argument before …
and depending on the next arguments of what we expect, we increment the pointer and increment it accordingly
Below is a simple code which shows how this can be done
int print(const char *str,...)

/*str has the number of integers passed*/

{

int i;

int num_count=atoi(str);

 int *num=(int *)&str;

for(i=1;i<=num_count;i++)

                printf("%d ",*(num+i));}

int print_num(int num_count,...)

/*num_count contains the number of integers passed*/

{

int i;

int *num=&num_count;

for(i=1;i<=num_count;i++)

printf("%d ",*(num+i));

}

int main()

{

print_num(3,2,3,4);

print("3",2,3,4);

}

For more updates, check Programming Insights.

網際論壇 - 硬體技術交流 - [教學]CPU風扇的安裝方式[圖]。

網際論壇 - 硬體技術交流 - [教學]CPU風扇的安裝方式[圖]。
#1 [教學]CPU風扇的安裝方式[圖]。

一、將散熱膏擠出少許置於CPU的主體上,不宜過多或太少,當風扇壓置於CPU上時,利用風扇壓力將散熱膏而能夠覆蓋CPU的核心主體為標準。 screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">
二、將CPU風扇一邊扣片先行扣住SOCKET的一邊。
注意:CPU風扇扣片有方向性,正確安裝方向為先扣住CPU Socket沒有突出的一邊。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">
三、再安裝另一個扣片至CPU Socket上的固定勾上,如下圖所示。基本上風扇的設計會以容易安裝為考量,因此,後扣上扣片的一邊通常會有讓安裝者有施力的位置,以方便安裝。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">
四、當安裝完成後,必須檢查CPU風扇是否與CPU緊密連接,確定CPU與風扇間完全沒有間隙。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">
五、若是安裝順序或方向錯誤時,則CPU與CPU風扇無法確實密合,如下圖所示。此時CPU風扇沒有確實與CPU核心主體接觸,無法達到散熱效果,容易導 致CPU過熱而當機。因此必須將風扇拆下重裝,拆下時請特別注意,不當的施力會將CPU本體壓壞,導致CPU損毀而無法正常工作。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">
六、最後安裝CPU風扇的電源線,注意:不要讓電線纏住CPU風扇葉片,而導致風扇不運轉,使風扇失去作用。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">
七、另外一種可能安裝錯誤的情形:方向與順序都正確,但是沒有將風扇與CPU對齊,導致風扇的一邊壓在Socket上面,導致風扇沒有與CPU緊密接觸,這樣的安裝也會讓讓散熱效果打折,應該避免。應該確實將風扇移至CPU正上方,與第四點的安裝方式相同。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">

小D:若是風扇沒裝好,據說開機三次就掛了,本人剛好有一次燒壞CPU的紀錄!

2009年12月19日 星期六

2009年重大科學發現 440萬年骷髏化石登榜首-Yahoo!奇摩新聞

2009年重大科學發現 440萬年骷髏化石登榜首-Yahoo!奇摩新聞

2009年重大科學發現 440萬年骷髏化石登榜首

更新日期:2009/12/18 10:05 戴雅真

(法新社華盛頓17日電) 著名的「科學」(Science)期刊今天報導,2009年最重大的科學突破,就是發現了一具有440萬年歷史的骷髏化石,這也是已知人類最早的祖先。
這具叫做「雅蒂」(Ardi)的化石,榮登年度10大科學進展之首。上榜的還有發現月球上有水的存在,以及在實驗電子設備裡運用的超薄碳原子片。
「雅蒂」,或稱「拉密達猿人」(Ardipithecus ramidus),是人類學家長達15年辛苦研究的成果,這項發現在衣索比亞(Ethiopia)出土,讓我們對人類演化有更深入的了解。
「雅蒂」的歷史比前一個已知最古老骨骸「露西」(Lucy)要往前推120萬年,她的發現,破除了人類和現代人猿有直接相似性這項普遍迷思。
在「雅蒂」的骨骸、牙齒、骨盆和手腳發現的許多特性顯示,非洲黑猩猩雖然和人類有共同的祖先,但黑猩猩之後也經歷過許多演化。
「科學」期刊編輯艾伯茨(Bruce Alberts)說:「(雅蒂)改變了我們對早期人類演化的認知。」
這份期刊列出的重大發現,還包括透過美國國家航空暨太空總署(NASA)費米望遠鏡(Fermi)發現的新型脈衝星,其中一顆距離地球4600光年。
這項觀測成果幫助我們了解脈衝星的運作,以及它們對宇宙電磁輻射的貢獻。脈衝星是星體爆炸後,形成的快速旋轉、帶強烈磁場核心。
天體物理學家對這份10大科學進展榜單另有2項貢獻,包括NASA發現月球上有水的存在。
今年10月,NASA發射火箭,以時速9000公里的力道撞擊位於月球永久陰暗區、接近月球南極的凱布斯(Cabeus)隕石坑。
4分鐘之後,一具備有偵測儀器的太空船偵測到塵埃中帶有大量的水份。
此外,NASA還派遣太空人修復了哈伯太空望遠鏡(Hubble Space Telescope),提供空前的宇宙影像,獲得「科學」期刊高度讚揚。(譯者:中央社戴雅真)