È possibile utilizzare la chiamata task_info di Mach per trovare queste informazioni. Ecco il codice che funziona su OS X v10.9, e che ottiene la dimensione processo virtuale del processo in corso:
#include <mach/mach.h>
#include <mach/message.h> // for mach_msg_type_number_t
#include <mach/kern_return.h> // for kern_return_t
#include <mach/task_info.h>
#include <stdio.h>
int main(void) {
kern_return_t error;
mach_msg_type_number_t outCount;
mach_task_basic_info_data_t taskinfo;
taskinfo.virtual_size = 0;
outCount = MACH_TASK_BASIC_INFO_COUNT;
error = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&taskinfo, &outCount);
if (error == KERN_SUCCESS) {
// type is mach_vm_size_t
printf("vsize = %llu\n", (unsigned long long)taskinfo.virtual_size);
return 0;
} else {
printf("error %d\n", (int)error);
return 1;
}
}
Penso che questo esclude segmenti di memoria condivisa, ma non sono sicuro.
Dai un'occhiata a http://stackoverflow.com/questions/131303/linux-how-to-measure-actual-memory-usage-of-an-application-or-process –
Grazie, ma questo articolo si riferisce a strumenti che non sono disponibili su mac (/ proc, pmap, smem, htop, gcore) o su cose come valgrind che non sono un'opzione. Sono principalmente alla ricerca di un modo per trovare, in modo programmatico, la memoria (RAM) e lo SWAP utilizzati da un processo. PS potrebbe funzionare, ma non lo segnala. Avrei dovuto etichettare ogg-c invece di cacao. Ma non sarebbe meglio. Le chiamate C/C++ sono buone così come possono essere collocate su una piattaforma MAC OS. –