오늘 나는 C 코드로 제 친구를 돕고 있었고, 왜 그런 일이 일어 났는지 설명 할 수없는 이상한 행동을 발견했습니다. 우리는 TSV 파일에 정수가있는 줄을 int로 붙였습니다. 첫 번째 줄은 목록의 줄 수입니다.배열 타입과 배열이 malloc으로 할당 된 것의 차이
매우 간단한 "readfile"을 가진 c 파일도 있습니다. 제 N 라인으로 판독하고, 라인의 수는, 다음의 초기화가이었다
int list[n]
최종적 A A fscanf와 N의 루프.
작은 n (~ 100.000까지)이면 모든 것이 좋았습니다. 그러나 n이 클 때 (10^6), segfault가 발생한다는 것을 알았습니다.
마지막으로, 우리는 심지어 매우 큰 N으로,
int *list = malloc(n*sizeof(int))
과 모든 것을 목록 초기화를 변경하면 잘.
왜 이런 일이 발생했는지 설명 할 수 있습니까? 우리가 list = malloc (n * sizeof (int))를 사용하기 시작할 때 중지 된 int list [n]과 함께 segfault를 일으키는 것은 무엇입니까?
매우 정답답 ... 고마워요! –
좋은 답변입니다! 속도면에서도 차이가 있는지 궁금합니다. –
참조 지역의 영향으로 스택에 할당 된 배열의 액세스가 더 빠르며 'malloc' 자체가 스택 포인터를 범핑하는 것보다 훨씬 느린 것으로 생각됩니다. 그러나 실제로, 현재 진행중인 작업에 더 적합한 어떤 접근 방식을 사용하는 것이 가장 좋습니다. – templatetypedef