LINUX.ORG.RU

Узнать размер выделенной памяти


0

1

Искал и нигде не нашёл функцию для того чтобы узнать сколько памяти выделено имея указатель в Linux.

Хотя даже Mac OS X есть функция(унаследованная от *BSD как я понял) malloc_size(void *ptr) для этого.

Пока я вижу такое решение проблемы - использовать jemalloc либо tcmalloc - там это есть.

И если мне придётся использовать альтернативный аллокатор - какой лучше? Нужна большая скорость выделения мелких объектов минимум на 1.5ГБ



Последнее исправление: ur (всего исправлений: 1)

напиши свою 100500 обертку. делов то.

gensym ★★
()

если мне придётся использовать альтернативный аллокатор - какой лучше?

<костыль>
typedef struct {
  void * ptr;
  long int size;
} ololo_ptr;
<костыль/>
x0r ★★★★★
()
Ответ на: комментарий от ur

Кем используемую? Он показывает, сколько можно использовать - т. е. сколько реально выделил malloc. Тебе не это нужно?

unsigned ★★★★
()
Ответ на: комментарий от unsigned

В принципе да, работает. По ошибке не так перевёл значение в документации.

Вот пример использования который всё подтверждает:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

int main(int argc, char *argv)
{
	int i;
	char *ptr = (char*)malloc(256*512*1024);
	
	printf("Memory alloc: %d\n", 256*512*1024);
	
	printf("1. malloc_usable_size: %d\n", malloc_usable_size(ptr));
	
	for(i = 0; i < (256*512*1024)/2; i++) ptr[i] = 'X';
	
	printf("2. malloc_usable_size: %d\n", malloc_usable_size(ptr));
	
	free(ptr);
		
	return 0;
}

Results:

Memory alloc: 134217728 1. malloc_usable_size: 134221808 2. malloc_usable_size: 134221808

ur
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.