Как получить общую память кучи, выделенную пользователем, когда включены AddressSanitizer или ThreadSanitizer?Linux

Ответить Пред. темаСлед. тема
Anonymous
 Как получить общую память кучи, выделенную пользователем, когда включены AddressSanitizer или ThreadSanitizer?

Сообщение Anonymous »

Я хочу получить объем динамической памяти, выделенной с помощью mallinfo2():

Код: Выделить всё

/*
* File: main.c
*/

#include 
#include 
#include 

size_t GetHeapMemoryUsed() {
struct mallinfo2 mi = mallinfo2();
return mi.uordblks;
}

int main(void) {
size_t mem1 = GetHeapMemoryUsed();
char *p = (char *)malloc(65536);
size_t mem2 = GetHeapMemoryUsed();
printf("Heap memory used: %zu\n", mem2 - mem1);
free(p);
return 0;
}

Когда я компилирую его с помощью GCC (

Код: Выделить всё

gcc -std=c99 main.c && ./a.out
или g++ -std=c++11 main.cpp && ./a.out), это может дать мне правильный результат:

Код: Выделить всё

Heap memory used: 65552
Однако, когда я использую AddressSanitizer или ThreadSanitizer (добавьте опцию -fsanitize=address или -fsanitize=thread), это дает мне ноль:

Код: Выделить всё

Heap memory used: 0
И mem1 и mem2 равны нулю:

Код: Выделить всё

-    printf("Heap memory used: %zu\n", mem2 - mem1);
+    printf("Heap memory used: %zu\nmem1: %zu, mem2: %zu\n", mem2 - mem1, mem1, mem2);

Код: Выделить всё

Heap memory used: 0
mem1: 0, mem2: 0
Похоже, что AddressSanitizer и ThreadSanitizer берут на себя работу функции malloc, а mallinfo2 не может предоставить выделенную память.
Тогда как я могу получить объем кучи, выделенной при включенном AddressSanitizer или ThreadSanitizer?

Подробнее здесь: https://stackoverflow.com/questions/791 ... er-or-thre
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»