Я хочу знать, сколько памяти займет при выполнении кода.Я суммирую всю память, используемую в моем коде, и использую GCC для преобразования в исполняемый файл bin.
Когда я запускаю файл bin и использую cat/proc/$PID/status
, VmSata VmSize намного больше, чем ожидалось.Даже если удалить весь код, но только спящий, результат все равно тот же:
VmPeak: 12816 kB
VmSize: 12816 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 964 kB
VmRSS: 964 kB
VmData: 204 kB
VmStk: 136 kB
VmExe: 56 kB
VmLib: 2100 kB
VmPTE: 48 kB
VmPMD: 12 kB
VmSwap: 0 kB
- Почему объем памяти такой большой, даже если в моем коде нет данных?данные, которые я оцениваю в коде, должны быть не более 40 КБ, но VmData - 204 КБ, намного больше ...
- Почему VmData одинакова, независимо от того, добавляю я в коде #if 0 или нет?Почему бы не изменить на меньшее при добавлении?По крайней мере, я думаю, что он должен быть на 30 КБ меньше ...
- как получить память, которую мой код использует точно?Есть еще способы проверить?
#include <stdio.h>
int main()
{
#if 0
extern int ed25519_getpub(unsigned char* public_key, const unsigned char* private_key);
extern int ed25519_sign(unsigned char* signature,
const unsigned char* private_key,
const unsigned char* msg, const unsigned long msg_len); // use a large static global 30K array
extern int ed25519_verify(const unsigned char* signature,
const unsigned char* public_key,
const unsigned char* msg, const unsigned long msg_len); // use the same 30K array
int ret = 0;
unsigned char public_key[32];
unsigned char private_key[32] = "123456789ABC";
unsigned char signature[64];
unsigned char msg[64] = "abcdefghijklmnopqrstuvwxyz";
sleep(20);
#endif
for (int i = 0; i < 1000000; i++)
{
#if 0
//compute public key
ret = ed25519_getpub( public_key, private_key );
if (0 != ret)
{
ret = 1;
}
printf("public_key = %s, ret = %d \r\n ", public_key, ret);
ret = ed25519_sign( signature, private_key, msg, strlen(msg) );
if (0 != ret)
{
ret = 2;
}
printf("signature = %s, ret = %d, \r\n", signature, ret);
//verify sign
ret = ed25519_verify( signature, public_key, msg, strlen(msg) );
if (0 != ret)
{
ret = 3;
}
printf("ed25519_verify ret = %d, \r\n ", ret);
#endif
if (0 == (i % 5 ))
{
sleep(10);
}
}
return 0;
}