2013-11-01 53 views
3

在舊版本的Delphi(ANSI字符串),ShortStrings:ShortString短的Unicode版本

var Str: String[30]; 

可以用來降低內存成本,仍然有ANSI編碼。

在當前的Unicode版本中,像上面的ShortString,別名爲某些Unicode編碼版本?
這種做法的好處是否仍然存在降低內存成本?

+1

爲什麼浪費5分鐘的論壇,當你可以在一分鐘內學會它? 'var s:string [10];開始WriteLn(SizeOf(s):10,SizeOf(s [1]));' –

+0

@ Arioch'The試驗和錯誤的方法也可以「證明」硬幣始終登頂。我從不喜歡推薦試驗和錯誤。例如,您的方法不會發現使短字符串使用Unicode字符的隱藏編譯器選項。承認沒有這樣的選擇,但是如你所提議的反覆試驗並不會揭示它,如果它存在。 –

+1

有趣的是關於使用短字符串降低內存成本的部分。幾天前我做了相反的事情:用長字符串替換短字符串以減少內存佔用。我在這方面取得了成功嗎?你打賭!我得到了大量的實例,只有它們原始內存佔用的一小部分,包括長字符串的內存(如果使用的話)。我不得不提到它是一個Unicode之前的Delphi。 – JensG

回答

4

Delphi短字符串始終使用ANSI編碼,即使在現代Unicode可識別的Delphi版本中也是如此。它們被認爲是傳統的數據類型,因此Embarcadero在引入Unicode時選擇不進行更改。

對於什麼是值得的,使用短字符串不一定會降低內存成本。只有當你的字符串全部接近相同長度時纔會這樣做。如果你的字符串的長度有很大的變化,那麼使用動態字符串(a.k.a. long)會導致內存開銷較低。

我不認爲短弦比動態絃樂更好。它們的存在僅僅是因爲它們是在動態字符串之前進行的。如果首先發明動態字符串,則不會存在短字符串。事實上,它們並不存在於新的移動編譯器中。換句話說,只需使用動態字符串。

+0

我在問,因爲我正在將一箇舊的ANSI應用程序移植到Unicode版本,並且它充滿了ShortString。我想我會改變他們所有的字符串。 – EProgrammerNotFound

+1

是的,我認爲這將是明智的。注意程序界限處的任何代碼。通常情況下,這將是將這些字符串寫入/讀取的代碼。 –

+0

我打算做錯事。我認爲ShortString的每個角色都變成了WideChar,非常感謝! – EProgrammerNotFound