iT邦幫忙

0

資料型態佔據空間問題

  • 分享至 

  • xImage

各位大大好~
小弟最近在碰一些計算機組織的東西
而研讀的是白算盤這本書籍(2014出版)
其中有個問題小弟很百思不解
題目是這樣的:

Which type of variable that can contain 1,000,000,000 takes the most
memory space?

  1. long long int in C
  2. string in C
  3. string in Java

這答案是1
但小弟的想法是這樣的
String在C和Java中應為char組成的陣列
所以1,000,000,000 用long long int表示應該只佔 8 bytes
而string表示則C應該佔 10 bytes (10個數)
在Java中應該佔20 bytes(java char是 1 halfword)
拿去compiler跑sizeof 呈現的也是小弟認為的結果

所以想請問各位大大是不是小弟有什麼觀念上的錯誤呢
有爬過文
stackoverflow有一篇只是小弟看不太懂解釋https://stackoverflow.com/questions/3590437/variable-that-can-contain-most-memory-space

看更多先前的討論...收起先前的討論...
1,000,000,000 這個假如當數字 INT 只需要 4 byte
如果當字串,連逗號也要算進去的話需要 13 byte
同樣的在 JAVA 也是一樣需要那麼長
這樣的話題目問最小,那不就只有答案 1 是 8byte => 最小
而實際上在C 只需要 long 的長度就能放這麼大的數字了
st474ddr iT邦新手 2 級 ‧ 2021-06-21 20:59:23 檢舉
@窮嘶發發發 感謝大大回覆
題目的意思不是用最多空間包含1,000,000,000的型態嗎?
一般來說在變數生命週期假如變化不會超過型態的最大值,那就使用該型態,這不是基本原則,你要用最大,那就改用字串型態啊,那答案怎麼會是 1
st474ddr iT邦新手 2 級 ‧ 2021-06-22 10:57:36 檢舉
對阿
大大這也是我好奇的地方哈哈
也許只能說對英文我也是一翻兩瞪眼啊,這種東西就是靠觀念解題了,大多數的題目不至於太文言文般的為難我們吧,有時候會更口語話的講述題目,電腦學者又不是語文學者,沒辦法比較的
st474ddr iT邦新手 2 級 ‧ 2021-06-22 23:45:35 檢舉
感謝大大 教授有回覆答案是3了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
EN
iT邦好手 1 級 ‧ 2021-06-21 15:38:39
最佳解答

我跟你的想法差不多,所以我根據你提供的資訊往下找,找到了一些有趣的東西

是說這個問題也太極端了吧...如果你有什麼新收穫還請務必跟我分享 QQ

  1. String in JAVA

JAVA 9 Compact string

  1. __int128

As an extension the integer scalar type __int128 is supported for targets which have an integer mode wide enough to hold 128 bits. Simply write __int128 for a signed 128-bit integer, or unsigned __int128 for an unsigned 128-bit integer. There is no support in GCC for expressing an integer constant of type __int128 for targets with long long integer less than 128 bits wide.
-- GCC Docs

看更多先前的回應...收起先前的回應...
st474ddr iT邦新手 2 級 ‧ 2021-06-21 21:02:27 檢舉

@Peter學程式 感謝大大的回覆
看了大大您提供的補充
這樣好像只能說明到2和3使用的是相同的!?
還是不能解釋為何1是使用最多的對嗎?

我其實有在懷疑是不是題目或答案有誤XDD~
但我看過幾版的內容答案都一樣
只不過第五版1原本是寫int 而新版改成long long int
雖然答案都還是一樣哈哈

EN iT邦好手 1 級 ‧ 2021-06-21 22:10:10 檢舉

st474ddr
你提供的問答串有人提到:

The C standard doesn't state many storage requirements. As it is, you could have:
256-bit C ints that take 32 bytes to store anything (see @nonnb's comment)

我想這應該就是答案(雖然很怪 XDD)

st474ddr iT邦新手 2 級 ‧ 2021-06-22 10:57:09 檢舉

那題目的意思其實是說
你能使用這些型態 盡可能去浪費最大空間嗎XD

EN iT邦好手 1 級 ‧ 2021-06-22 11:39:22 檢舉

st474ddr
因為題目的答案在那邊,我只能盡量把題目變成我們想要的形狀 XDDD
還是說,你可以考慮寫信給白算盤的作者,或是查查這本書有沒有勘誤表(搞不好答案是錯的)。

st474ddr iT邦新手 2 級 ‧ 2021-06-22 13:42:15 檢舉

我寫信了
我之前也查了勘誤表
這一部分並沒有被改掉

EN iT邦好手 1 級 ‧ 2021-06-22 14:52:34 檢舉

st474ddr
祝你順利!如果有後續的話再來報一下 :D

st474ddr iT邦新手 2 級 ‧ 2021-06-22 23:44:57 檢舉

教授回覆了 答案應該為3
1是最短的XDD

EN iT邦好手 1 級 ‧ 2021-06-23 13:27:48 檢舉

st474ddr
笑死,好險有去問 XDDD

我要發表回答

立即登入回答