我正在寫小內存分配系統。有:C內存池存儲
typedef struct _POOL
{
int size; /*size of memory pool*/
void* memory; /*pointer to pool location in memory*/
} Pool;
Pool* allocatePool(int n) {
Pool *myPool = malloc(sizeof(Pool) + n);
if (myPool){
myPool->size = n;
myPool->memory = myPool+1;
}
return myPool;
}
我想寫的功能,將存儲任意對象的大小n位置偏移池內。
void store(Pool* pool, int offset, int size, void *object) {
char *ptrHelper;
ptrHelper = &(pool->memory); /*copy pool memory address*/
ptrHelper += offset; /*increment to match offset*/
memcpy(ptrHelper, &object, size); /*copy object in to the pool*/
}
問題:
ptrHelper = &(pool->內存)是有越來越池內存地址的另一種正確的方式?
如果我想存儲大於void *對象大小的值(我的情況是4字節),該怎麼辦?
如何在不改變函數參數結構的情況下正確處理字符串? 謝謝。
爲什麼'&(pool-> memory)'而不是'pool-> memory'?看起來'pool-> memory'已經是一個指向池的指針了。爲什麼採取它的地址?如果'offset'是0,你不會覆蓋'pool-> memory'嗎? –
池 - >內存是我的池的基地址。增加它的地址更改我的池的地址並將偏移量設置爲0對我的目標地址沒有任何影響。我可能錯了。這些是我第一步到C :)。 – Arth
這是第二次轉貼!只是供參考:我標記它爲mod注意。堆棧溢出不是教程網站。如果你缺乏基礎知識,請閱讀一本C書,並從一些容易開始的練習開始。 – Olaf