[問題] 宣告時所佔用的記憶體大小

看板C_and_CPP作者 (james)時間16年前 (2009/11/16 17:42), 編輯推噓17(17023)
留言40則, 14人參與, 最新討論串1/1
在科技板看到的考題~~好像還滿常見的~~可是一直不知道答案~~也爬不到文 請問這些宣告所會佔用的位元組是多少?? int i int *j int *k[3] int (*a)[3] int *f() int (*g)() 好像compiler不一樣~~佔用記憶體大小也不同, 另外pointer佔4個bytes~~請版上先進解答一下~~謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.27.132.138

11/16 17:45, , 1F
答案全部都是不一定,包括 pointer
11/16 17:45, 1F

11/16 17:53, , 2F
如果integer為4bytes~~然後pointer佔4bytes呢~~這樣可算嗎
11/16 17:53, 2F

11/16 17:56, , 3F
int ptr的大小不在歸範內,甚至有對位的問題(maybe)
11/16 17:56, 3F

11/16 17:57, , 4F
function 的大小是無法算出來的
11/16 17:57, 4F

11/16 18:25, , 5F
想請教l大,連pointer也不一定的原因是?
11/16 18:25, 5F

11/16 18:25, , 6F
是因為假設如果是64bit主機上的話,pointer會變8bytes嗎
11/16 18:25, 6F

11/16 18:26, , 7F
因為就我目前所學,只知道pointer為4bytes
11/16 18:26, 7F

11/16 18:36, , 8F
總覺得和使用的compiler也有關....@_@"
11/16 18:36, 8F

11/16 18:36, , 9F
pointer為什麼會不一定這個我就不懂了~~不是會有一個固定空
11/16 18:36, 9F

11/16 18:37, , 10F
固定空間紀錄所指向的位址嗎~~難道還會有所變動
11/16 18:37, 10F

11/16 18:37, , 11F
不同的OS環境/開發平台, pointer的大小可能會有差@_@"
11/16 18:37, 11F

11/16 18:38, , 12F
嗯嗯~~我知道~~所以題目預定pointer佔了4bytes
11/16 18:38, 12F

11/16 18:41, , 13F
另外我不懂當宣告int *k[3]時~~是只有4bytes的pointer空間
11/16 18:41, 13F

11/16 18:42, , 14F
還是4bytes*3=12bytes的空間~~
11/16 18:42, 14F

11/16 18:46, , 15F
如果int 4bytes, pointer 4bytes
11/16 18:46, 15F

11/16 18:52, , 16F
答案是4, 4, 12, 4, ???, 4
11/16 18:52, 16F

11/16 19:31, , 17F
int *f()是function呀 這怎麼算大小
11/16 19:31, 17F

11/16 19:39, , 18F
compiler的講法我也聽說過,不過常聽到的是address
11/16 19:39, 18F

11/16 20:00, , 19F
不能說32bit系統 所以指標需要有2^32 來存位址嘛 所以4b???
11/16 20:00, 19F

11/16 20:00, , 20F
如果是64位元就2^64 所以指標需要8b來存位址 這解釋有錯嗎@@
11/16 20:00, 20F

11/16 20:35, , 21F
那麼16bit系統的指標是多大呢?
11/16 20:35, 21F

11/16 20:40, , 22F
2b? 我不知道請糾正觀念Thx
11/16 20:40, 22F

11/16 22:15, , 23F
想請問h大 int (*a)[3] 這個4bytes是怎麼解讀的
11/16 22:15, 23F

11/16 22:24, , 24F
google operator pecedence
11/16 22:24, 24F

11/16 23:11, , 25F
int (*a)[3]; 是 a pointer to "size 3 int array"
11/16 23:11, 25F

11/16 23:12, , 26F
int *k[3]; 是 a size 3 int pointer array
11/16 23:12, 26F

11/17 00:07, , 27F
int 定義成與累加暫存器同寬度, pointer看 IP寬度
11/17 00:07, 27F

11/17 00:08, , 28F
pointer就"只是" pointer,他指向int,char,func你決定就好
11/17 00:08, 28F

11/17 00:27, , 29F
DOS 16bits時代地址長這樣 FFFF:0000 =w=
11/17 00:27, 29F

11/17 00:27, , 30F
int 並未定義成與累加暫存器同寬
11/17 00:27, 30F

11/17 01:03, , 31F
其實小弟也懶懶的在等強者大大整理所謂## bits的程式,
11/17 01:03, 31F

11/17 01:03, , 32F
不然每次都只能講作業平台/開發環境這種模糊的說法Orz
11/17 01:03, 32F

11/17 01:49, , 33F
不是歐 應該是看 target machine, 不是compiler本身
11/17 01:49, 33F

11/17 02:04, , 34F
作業平台跟開發環境說法不模糊呀~~
11/17 02:04, 34F

11/17 02:06, , 35F
再編譯器支援int64的情況下 假使作業環境為16bit
11/17 02:06, 35F

11/17 02:07, , 36F
而假使在組合成64bit的變數 仍然可以讓定址及運算work
11/17 02:07, 36F

11/17 02:08, , 37F
則這是可以被接受的
11/17 02:08, 37F

11/17 12:35, , 38F
小弟的作業平台是指target啦, 開發環境才是指編譯端^^||
11/17 12:35, 38F

11/17 12:36, , 39F
以前總覺得這樣講好像不是很精確的決定bit數這一回事Orz
11/17 12:36, 39F

11/17 12:36, , 40F
抱歉前面推文沒講清楚<(_ _)>
11/17 12:36, 40F
文章代碼(AID): #1B0Hw9gh (C_and_CPP)