我試圖獲得算法所消耗的內存,所以我創建了一組函數,它會在10毫秒的時間段內停止執行,讓我使用getrusage()函數讀取內存。這個想法是設置一個計時器,它會向處理器medir_memoria()收到的進程發出報警信號。這個「警報」錯誤是什麼意思?
然而,該方案在中途停止此消息:
[1] 3267 alarm ./memory_test
讀取內存的代碼是:
#include "../include/rastreador_memoria.h"
#if defined(__linux__) || defined(__APPLE__) || (defined(__unix__) && !defined(_WIN32))
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <signal.h>
#include <sys/resource.h>
static long max_data_size;
static long max_stack_size;
void medir_memoria (int sig)
{
struct rusage info_memoria;
if (getrusage(RUSAGE_SELF, &info_memoria) < 0)
{
perror("Not reading memory");
}
max_data_size = (info_memoria.ru_idrss > max_data_size) ? info_memoria.ru_idrss : max_data_size;
max_stack_size = (info_memoria.ru_isrss > max_stack_size) ? info_memoria.ru_isrss : max_stack_size;
signal(SIGALRM, medir_memoria);
}
void rastrear_memoria()
{
struct itimerval t;
t.it_interval.tv_sec = 0;
t.it_interval.tv_usec = 10;
t.it_value.tv_sec = 0;
t.it_value.tv_usec = 10;
max_data_size = 0;
max_stack_size = 0;
setitimer(ITIMER_REAL, &t,0);
signal(SIGALRM, medir_memoria);
}
void detener_rastreo()
{
signal(SIGALRM, SIG_DFL);
printf("Data: %ld\nStack: %ld\n", max_data_size, max_stack_size);
}
#else
#endif
的main()函數的工作原理調用所有的人都在此順序:
- rastrear_memoria()
- 功能該該算法的離子我測試
- detener_rastreo()
我該如何解決這個問題?那個警報信息是什麼意思?