2013-02-23 149 views
0

我只是有一個關於char數組如何處理內存池併爲其分配其他變量類型的指針的快速問題。我正在處理一個使用char數組作爲內存池的任務,並且我需要能夠爲它分配指針,並且我已經閱讀了關於該主題的一些信息,但我不完全理解實際分配如何工作的一部分如:使用char數組的C++內存池

const int poolSize = 60000; 
char pool[poolSize]; 

void* allocate(int aSize) 
{ 

    //..... 

return ((void*) 0); 
} 

long* pointer; 
pointer = (long *) allocate(sizeof(long)); 
*pointer = 0xDEEDEEEF; 

我只是不完全得到具體的工作,因爲一個char是1個字節,而長應該是4和它是如何與這樣的工作時,我需要分配在4個點數組到一個長指針變量?也可以隨意給出例子和解釋,但請不要放棄整個程序應該如何工作,因爲一旦我明確瞭解這個部分是如何工作的,我想自己弄明白。謝謝

+0

除了你的'pool',你需要一些方法來跟蹤哪些字節被使用。 'allocate'然後可以找到'aSize'可用的連續字節,將指針返回到它的開頭,並將這些字節標記爲已使用。 – 2013-02-23 07:40:41

+0

因此,如果我要做一些事情,例如初始化池中的所有點到字符'F',例如,然後我可以檢查連續的一定數量的F來知道它們是否爲空,並將它們設置爲'T'或別的東西來標記他們填充然後這將允許我跟蹤這個。像這樣或者其他方式初始化它們會更好嗎?然後,爲了解除分配,我只是返回一個指向該集合的第一個字節和變量的指針,然後返回並將其使用的字節標記爲空閒的? – zfetters 2013-02-23 07:47:23

+0

你應該看看C++分配器的概念。 – 2013-02-23 08:53:33

回答

2

內存分配是獨立的類型,即是否長/ char.etc但事情是,它是量化的「字節」。 char是唯一需要一個字節內存的數據類型。

它在你的程序中如何處理分配的內存。例如

char s[4]={0,0,0,'A'}; 
int *p = (int*)s; //treating those 4 bytes as int 
printf("%d",*p); //will print 65 

我會建議你先看4-5斯坦福特編程範式講座。內存分配在這些講座中解釋得非常好。你也可以參考C編程語言的第8章 - by Denis Ritchie

+0

感謝您的建議,我會查看今晚和明天的視頻 – zfetters 2013-02-23 07:51:58