[問題] 物件中的變數成員是否會被安排在連續記 …
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
C++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
N
問題(Question):
假設我有一個class長成下面這樣:
class MyClass
{
public:
MyClass();
private:
char Val_1;
char Val_2;
char Val_3;
...
char Val_N;
};
請問我可以認為Val_1~Val_N是一塊連續的記憶體空間嗎?
目前做了N=6的測試發現是如此,但我無法確定是否在任何環境下(編譯器、OS等)都能得
到相同結果。
餵入的資料(Input):
N
預期的正確結果(Expected Output):
N
錯誤結果(Wrong Output):
N
程式碼(Code):(請善用置底文網頁, 記得排版)
N
補充說明(Supplement):
回diabloevagto:
我在做的東西是檔案分析,比方說使用者選擇一個音樂檔,檔頭會包含一些資訊,比方
說檔案大小、格式、聲道數、取樣頻率、取樣深度...等,所以我建立了一個class希望
把這些資訊包起來:
class FileAnalysis
{
public:
FileAnalysis();
bool OpenFile(string);
private:
unsigned char Size[4];
unsigned char Format[4];
unsigned char Channel[2];
unsigned char SampleRate[2];
unsigned char SampleBit[2];
...
};
並且我希望在產生物件時,先將這些資訊初始化:
FileAnalysis::FileAnalysis()
{
memset( Size, 0, sizeof(Size));
memset( Format, 0, sizeof(Format));
memset( Channel, 0, sizeof(Channel));
memset( SampleRate, 0, sizeof(SampleRate));
memset( SampleBit, 0, sizeof(SampleBit));
...
}
這麼一來有個問題,當所要包入的資訊越來越多的時候,建構函式就越來越可怕,
為了不讓程式變成世界奇觀,我想應該有某種方式能簡化這個程序,所以我才想到
,如果能確保記憶體是在連續區塊,或許我可以:
memset( Size, 0, sizeof(N));
此時N是資訊佔用的總長度,當然回文中有提到這個方式是錯的,不過可以把資訊再
包成struct再以此方式進行。
謝謝大家提供的一些建議。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.72.212.239
推
09/22 15:16, , 1F
09/22 15:16, 1F
推
09/22 15:17, , 2F
09/22 15:17, 2F
→
09/22 15:20, , 3F
09/22 15:20, 3F
→
09/22 15:24, , 4F
09/22 15:24, 4F
推
09/22 15:25, , 5F
09/22 15:25, 5F
→
09/22 15:25, , 6F
09/22 15:25, 6F
→
09/22 15:30, , 7F
09/22 15:30, 7F
→
09/22 15:31, , 8F
09/22 15:31, 8F
→
09/22 15:33, , 9F
09/22 15:33, 9F
→
09/22 15:34, , 10F
09/22 15:34, 10F
→
09/22 15:40, , 11F
09/22 15:40, 11F
→
09/22 15:41, , 12F
09/22 15:41, 12F
→
09/22 15:41, , 13F
09/22 15:41, 13F
→
09/22 15:50, , 14F
09/22 15:50, 14F
→
09/22 15:50, , 15F
09/22 15:50, 15F
→
09/22 15:57, , 16F
09/22 15:57, 16F
→
09/22 15:57, , 17F
09/22 15:57, 17F
→
09/22 15:57, , 18F
09/22 15:57, 18F
→
09/22 15:57, , 19F
09/22 15:57, 19F
→
09/22 16:09, , 20F
09/22 16:09, 20F
→
09/22 16:10, , 21F
09/22 16:10, 21F
→
09/22 16:24, , 22F
09/22 16:24, 22F
→
09/22 16:24, , 23F
09/22 16:24, 23F
→
09/22 16:25, , 24F
09/22 16:25, 24F
※ 編輯: icetofux 來自: 211.72.212.239 (09/22 16:53)
推
09/22 16:47, , 25F
09/22 16:47, 25F
→
09/22 17:01, , 26F
09/22 17:01, 26F
→
09/22 17:03, , 27F
09/22 17:03, 27F
→
09/22 17:04, , 28F
09/22 17:04, 28F
→
09/22 17:38, , 29F
09/22 17:38, 29F
→
09/22 17:38, , 30F
09/22 17:38, 30F
→
09/22 17:39, , 31F
09/22 17:39, 31F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):