我想知道代码运行时将占用多少内存。 我总结了代码中使用的所有内存,并使用GCC转换为可执行的bin文件。
当我运行bin文件并使用cat/proc/$PID/status
时,VmSize VmData比预期的要大得多。即使删除所有代码但仅休眠,结果仍然相同,
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
#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;
}
答案 0 :(得分:-2)
代码量可归结为:(因为大部分代码通过''#if 0'...'#endif'序列消除了)
#include <unistd.h> // for the 'sleep()' function
int main( void )
{
for (int i = 0; i < 1000000; i++)
{
if ( 0 == (i % 5 ) )
{
sleep(10);
}
}
}
其中:我正在ubuntu Linux 18.02上编译
这是我编译代码的方式:
gcc -ggdb -Wall -Wextra -Wconversion -pedantic -std=gnu11 -c "untitled2.c"
这是我链接代码的方式:
gcc -ggdb -Wall -o "untitled2" "untitled2.c"
注意:-ggdb
是这样,因此代码将包含gdb
调试器的最大调试信息
编译/链接后,可执行文件的大小可以通过以下方式找到:
ls -al untitled2.c
结果为:
-rwxrwxrwx 1 richard richard 182 Mar 4 20:54 untitled2.c
182个字节看起来不像204k也不是40k
请发布您的编译器和操作系统,并编译+链接到dynamic
(默认)可执行文件或static
可执行文件