사용자로부터 콘솔 입력을 계속 가져 와서 저장하는 다른 방법이 있습니까?입력 크기를 미리 알 수 없지만 입력을 저장해야하는 경우 C에서 사용자 입력을 얻는 유일한 방법은 realloc입니까?
0
A
답변
2
음, 물론 "큰"버퍼를 미리 할당하고 필요에 따라 부분을 사용하면 힙 메모리를 사용하지 않아도됩니다.
정적 인 (사전에 알려진) 제한이 있음을 의미합니다. 그 주위의 유일한 것은 malloc()
과 realloc()
을 통해 힙을 사용하는 것입니다.
0
아니요. C에는 세 가지 메모리 할당 장치가 있습니다. malloc, calloc 및 realloc. 다른 두 가지에 비해 realloc은 realloc을 호출 할 때마다 전체 메모리 뱅크를 다시 초기화하기 때문에 매우 비쌉니다 (이 이유 때문에 2 : 1, 2, 4, 8, 16, 32의 제곱으로 초기화하는 것이 낫습니다.) 한 번에 하나의 추가 변수 위치를 초기화 한 경우처럼 복사 프로세스가 오래 걸리지 않습니다.
malloc과 calloc의 주요한 차이점은 malloc이 메모리를 초기화하지 않는다는 것입니다. 따라서 calloc은 메모리를 '0'으로 줄이는 반면에 문자 그대로 쓰레기로 끝날 수 있습니다.
관련 문제
- 1. objective-c에서 사용자 입력을 시뮬레이트하는 방법은 무엇입니까?
- 2. 사용자 입력을 미리 만들어진 텍스트 체인과 비교하십시오.
- 3. C에서 사용자 입력을 얻는 가장 좋은 방법은 무엇입니까?
- 4. C에서 maxsize없이 사용자 입력을 읽음
- 5. C에서 사용자 입력을 어떻게 확인합니까?
- 6. C에서 입력을 제한하는 방법
- 7. iPhone에서 사용자 입력을 얻는 방법
- 8. Gradle : 사용자 입력을 얻는 방법
- 9. 해당 입력을 검증하는 유일한 elemenents
- 10. 프롤로그에서 사용자 입력을 얻는 방법
- 11. MySQL에서 사용자 입력을 얻는 방법?
- 12. Java 콘솔에서 입력을 미리 채우기
- 13. 파이썬에서 이전 사용자 입력을 기반으로 사용자 입력을 요청하는 방법은 무엇입니까?
- 14. C에서 사용자 입력을 사용하는 동안 수행
- 15. 입력을 임의의 횟수로 입력
- 16. 팝업 컨트롤에서 사용자 입력을 얻는 방법
- 17. Ajax.ActionLink 호출을위한 사용자 입력을 얻는 방법?
- 18. Python에서 문자 그리드의 사용자 입력을 얻는 방법
- 19. C에서 올바른 입력을 입력 할 때까지 콘솔을 루프하는 방법은 무엇입니까?
- 20. 사용자 입력을 역순으로 출력
- 21. Ruby에서 여러 줄 사용자 입력을 얻는 방법?
- 22. 자바 스크립트에서 사용자 입력을 얻는 방법
- 23. jQuery는 사용자 입력을 유형으로 별도 div에 입력
- 24. 부모로부터 입력을 선택하고 입력 값을 얻는 방법?
- 25. 프롬프트에서 JavaScript로 사용자 입력을 얻는 방법
- 26. React/Redux, 사용자 입력을 얻는 방법
- 27. cocos2d를 사용하여 사용자 입력을 얻는 방법
- 28. 입력 상자에서 4 개의 입력을 얻는 방법
- 29. 문자열에 사용자 입력을 추가합니다.
- 30. 크롬 확장자에서 사용자 입력을 얻는 가장 좋은 방법은 무엇입니까?
나는 realloc에 대해서는 그렇게 생각하지 않는다. 구현에서 나는 그것이 malloc(), free() 그리고 memcpy()와 같은 무료, 아주 싼, 정확히 같은 비용을 가지고 있음을 안다. –
아니에요. 비용은 엄청납니다. memcpy()는 복사 할 메모리의 길이가 증가함에 따라 지수 곡선에서 증가하는 자체 비용이 큽니다. – ciphermagi
먼저 생각해보십시오. 같거나 작은 크기의 realloc은 대개 무료입니다. 조금 더 큰 realloc은 작은 책 관리 작업을 필요로합니다. memcpy는 O (n)이 아니라 O (n^2)입니다. http://stackoverflow.com/questions/362760/how-do-realloc-and-memcpy-work를 참조하십시오. –