프로그램이 간단한 명령을 위해 너무 많은 메모리를 할당하는 이유는 무엇입니까?


0

Valgrind는 whois방금 버전을 요구하더라도 많은 메모리 를 할당 한다고보고합니다 .

$ valgrind whois --version
==18086== Memcheck, a memory error detector
==18086== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==18086== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==18086== Command: whois --version
==18086== 
Version 5.2.11.

Report bugs to <md+whois@linux.it>.
==18086== 
==18086== HEAP SUMMARY:
==18086==     in use at exit: 65 bytes in 1 blocks
==18086==   total heap usage: 56 allocs, 55 frees, 15,171 bytes allocated
==18086== 
==18086== LEAK SUMMARY:
==18086==    definitely lost: 0 bytes in 0 blocks
==18086==    indirectly lost: 0 bytes in 0 blocks
==18086==      possibly lost: 0 bytes in 0 blocks
==18086==    still reachable: 65 bytes in 1 blocks
==18086==         suppressed: 0 bytes in 0 blocks
==18086== Rerun with --leak-check=full to see details of leaked memory
==18086== 
==18086== For counts of detected and suppressed errors, rerun with: -v
==18086== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

다른 여러 유틸리티를 실험 한 결과 이것이 많은 유틸리티에 공통적이라는 것을 알았습니다. 간단한 명령을 위해 많은 메모리를 할당합니다. gcc를보십시오!

$ valgrind gcc --version
==18141== Memcheck, a memory error detector
==18141== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==18141== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==18141== Command: gcc --version
==18141== 
gcc (Ubuntu 5.3.1-14ubuntu2.1) 5.3.1 20160413
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

==18141== 
==18141== HEAP SUMMARY:
==18141==     in use at exit: 116,660 bytes in 62 blocks
==18141==   total heap usage: 171 allocs, 109 frees, 135,692 bytes allocated
==18141== 
==18141== LEAK SUMMARY:
==18141==    definitely lost: 4,552 bytes in 13 blocks
==18141==    indirectly lost: 0 bytes in 0 blocks
==18141==      possibly lost: 0 bytes in 0 blocks
==18141==    still reachable: 112,108 bytes in 49 blocks
==18141==         suppressed: 0 bytes in 0 blocks
==18141== Rerun with --leak-check=full to see details of leaked memory
==18141== 
==18141== For counts of detected and suppressed errors, rerun with: -v
==18141== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

1
그렇다면 whois는 약 100 바이트의 메모리를 사용해서는 안되며 gcc는 135KB를 많이 사용해서는 안된다고 생각합니까? 정말!?!?! 그것이하는 일을 알고 싶다면 소스 코드를보십시오. 당신이 그것을 최적화하는 프로그램을 배우는 데 인생을 보내고 있더라도 일부 기능을 제거하지 않고는 그것을 줄일 수 없을 것입니다.
Julie Pelletier

엠블럼 ... "hello, world"프로그램을 작성하고 얼마나 많은 메모리를 할당하는지 보시겠습니까? 심지어 malloc (또는 동등한) 호출을하지 않더라도? gcc의 경우 컴파일러가 얼마나 복잡한 지에 대한 단서가 있습니까?
Jamie Hanrahan 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.