C语言中变量在内存中是如何存放的
首先我們知道計(jì)算機(jī)有32位/64位,那這里的32位/64位代表什么意思呢?
其實(shí)這里的32位/63位代表地址線,如果你的電腦是32位的,就是地址總線寬度為32位,一次可以發(fā)送的一個(gè)數(shù)據(jù)是32位的,則尋址的單元最大就是32位數(shù)據(jù)的最大值,就是2的32次方。地址總線寬度決定了CPU可以訪問的物理地址空間,簡單地說就是CPU到底能夠使用多大容量的內(nèi)存。
為了能夠有效的訪問到內(nèi)存中的每個(gè)單元,給內(nèi)存單元進(jìn)行編號,這個(gè)編號就是內(nèi)存單元地址,通過地址可以進(jìn)行訪問該內(nèi)存。
那你知道每一個(gè)內(nèi)存單元的大小是多少嗎?
答案是1個(gè)字節(jié),這里是一個(gè)字節(jié)的原因其實(shí)是通過計(jì)算算出來的最合適的大小,這樣可以更加有效的利用內(nèi)存。
首先8 bits(比特)= 1byte(字節(jié)) ? 1KB=1024Bytes 1MB=1024KB 1GB=1024MB
原因解釋:
①假設(shè)一個(gè)內(nèi)存單元的大小是一個(gè)bit,那么32位內(nèi)存能存儲的最大的數(shù)據(jù)量是2^32個(gè)bit, 轉(zhuǎn)化為十進(jìn)制是4294967296bit
4294967296Bit = 536870912Byte = 524288KB = 512MB = 0.5GB
這樣算下來總的能存儲的內(nèi)存大小才是0.5GB,這也太小了吧,明顯不合適。
如果定義一個(gè)char ch = 'w';一個(gè)字符在內(nèi)存中占一個(gè)字節(jié),一個(gè)內(nèi)存單元就是一個(gè)bit,存儲一個(gè)字符就要使用8個(gè)內(nèi)存單元,存儲一個(gè)整型變量就要使用32個(gè)內(nèi)存單元,不易于操作修改內(nèi)存。
②假設(shè)一個(gè)內(nèi)存單元的大小是一個(gè)byte,那么32位內(nèi)存能存儲的最大的數(shù)據(jù)量是2^32個(gè)byte, 轉(zhuǎn)化為十進(jìn)制是4294967296byte
4294967296byte = 4194304KB = 4096MB = 4GB
剛好定義一個(gè)字符占據(jù)一個(gè)內(nèi)存單元。這樣算下來感覺才比較正常。
③同理,假設(shè)一個(gè)內(nèi)存單元的大小是kb,那么
4294967296KB = 4194304MB = 4096GB = 4TB ,這樣就有一些離譜了吧。
加入你要定義一個(gè)字符,它只占據(jù)一個(gè)字節(jié)的大小,但是它要放在一個(gè)內(nèi)存單元中就占據(jù)了一個(gè)kb的大小,浪費(fèi)了內(nèi)存資源
綜上的考量下來,你是否明白了內(nèi)存中一個(gè)內(nèi)存單元為什么是一個(gè)字節(jié)的大小了呢?不過這也只是我學(xué)習(xí)到的和思考出來的結(jié)果,如果你有不同的見解,我們可以繼續(xù)探討一下。
總結(jié)
以上是生活随笔為你收集整理的C语言中变量在内存中是如何存放的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 游戏改编电影《龙与地下城》今日影院上映
- 下一篇: 5.98万起售还嫌贵?五菱缤果上市即热销