C에서 main
함수와 함께 사용되는 명령 줄 인수 argc
, arv[]
은 메모리에 어디에 저장됩니까?메모리 세그먼트 명령 줄 인수는 저장됩니까?
이 질문을 찾고있는 저장 영역은 힙, 데이터 세그먼트, 스택 또는 기타 여야합니다.
C에서 main
함수와 함께 사용되는 명령 줄 인수 argc
, arv[]
은 메모리에 어디에 저장됩니까?메모리 세그먼트 명령 줄 인수는 저장됩니까?
이 질문을 찾고있는 저장 영역은 힙, 데이터 세그먼트, 스택 또는 기타 여야합니다.
그의 answer에있는 torek에 따르면 C 언어는 명령 행 인수를 저장해야하는 위치를 정의하지 않으며 알기에 많은 실제 사용이 없습니다. 그러나 정보는 일반적으로 스택에 저장됩니다.
이 코드는 환경을 유지하기 위해 main()
의 공통 확장을 사용하고 인수와 환경 모두의 주소를 인쇄합니다. 내 Mac에서 실행하면
#include <stdio.h>
#include <inttypes.h>
int main(int argc, char **argv, char **envp)
{
printf("&argc = 0x%.8" PRIXPTR "\n", (uintptr_t)&argc);
printf("&argv = 0x%.8" PRIXPTR "\n", (uintptr_t)&argv);
printf("&envp = 0x%.8" PRIXPTR "\n", (uintptr_t)&envp);
while (*argv != 0)
printf("*argv = 0x%.8" PRIXPTR "\n", (uintptr_t)*argv++);
while (*envp != 0)
printf("*envp = 0x%.8" PRIXPTR "\n", (uintptr_t)*envp++);
return 0;
}
, 그것은 보여 주었다 :
꽤 재미 없어하지만 모든 주소가 C 스택이다 동일한 일반 영역에있는 것을 알 수
&argc = 0x7FFF5494B52C
&argv = 0x7FFF5494B520
&envp = 0x7FFF5494B518
*argv = 0x7FFF5494B748
*envp = 0x7FFF5494B74E
*envp = 0x7FFF5494B839
*envp = 0x7FFF5494B862
*envp = 0x7FFF5494B86D
*envp = 0x7FFF5494B889
*envp = 0x7FFF5494B8C1
*envp = 0x7FFF5494B8F4
*envp = 0x7FFF5494B905
*envp = 0x7FFF5494B915
*envp = 0x7FFF5494B920
*envp = 0x7FFF5494B92E
*envp = 0x7FFF5494B93B
*envp = 0x7FFF5494B974
*envp = 0x7FFF5494B998
*envp = 0x7FFF5494B9CD
*envp = 0x7FFF5494B9F2
*envp = 0x7FFF5494BA0B
*envp = 0x7FFF5494BA2A
*envp = 0x7FFF5494BA46
*envp = 0x7FFF5494BA7B
*envp = 0x7FFF5494BB2E
*envp = 0x7FFF5494BB3C
*envp = 0x7FFF5494BB76
*envp = 0x7FFF5494BB87
*envp = 0x7FFF5494BB9D
*envp = 0x7FFF5494BBC8
*envp = 0x7FFF5494BBEA
*envp = 0x7FFF5494BC2B
*envp = 0x7FFF5494BC35
*envp = 0x7FFF5494BC51
*envp = 0x7FFF5494BC5F
*envp = 0x7FFF5494BC75
*envp = 0x7FFF5494BC82
*envp = 0x7FFF5494BD55
*envp = 0x7FFF5494BD7E
*envp = 0x7FFF5494BD96
*envp = 0x7FFF5494BDA3
*envp = 0x7FFF5494BDAE
*envp = 0x7FFF5494BDBF
*envp = 0x7FFF5494BDCA
*envp = 0x7FFF5494BDE8
*envp = 0x7FFF5494BE01
*envp = 0x7FFF5494BE09
*envp = 0x7FFF5494BE1E
*envp = 0x7FFF5494BE38
*envp = 0x7FFF5494BE52
*envp = 0x7FFF5494BE71
*envp = 0x7FFF5494BE7D
*envp = 0x7FFF5494BEF5
*envp = 0x7FFF5494BF16
*envp = 0x7FFF5494BF27
*envp = 0x7FFF5494BF32
*envp = 0x7FFF5494BF66
*envp = 0x7FFF5494BF8D
. (맥 OS X 10.8.4에서 테스트 - 64 비트 프로그램, 커맨드 라인 인수없이 큰 환경.)
언어로 지정되지 않았습니다.
유닉스 계열 시스템은 스택 (또는 더 복잡한 시스템 중 하나 인 "a"스택의 경우 두 개 이상 있기 때문에 스택에 넣습니다.
나는 그것이 answer와 비슷한 질문이라고 생각한다. http://stackoverflow.com/questions/4196201/where-are-cc-main-functions-parameters : –