Я пытаюсь написать функцию размера следующим образом:
size(void *p,int size);
Что бы вернуть размер массива, на который указывает p. Например:
Int *a = malloc((sizeof(int)*100));
size(a,sizeof(int)); // this should return 100
Я думаю, что это возможно, потому что, если я вспомню, malloc отслеживает пространство, выделенное в некоторых байтах заголовка.
Вот что у меня есть:
int size(void *p, int size)
{
p = (unsigned int *)p - 1;
unsigned int elements = (*(unsigned int *)p);
return elements/size;
}
Теперь, если предположить, что размер выделенного пространства находится в 4 байтах перед указателем, это должно вернуть байты или смещение. Это где я немного в темноте. Я не могу понять особенности того, как malloc форматирует эти байты заголовка. Как malloc упаковывает биты заголовка?
Спасибо, я ценю это. Я уверен, что с этим кодом что-то не так, и он не особенно переносим и может зависеть от системы, но я делаю это для развлечения.