나는 C로 코딩 표준을 읽었으며 동적 메모리 할당을 사용하지 못하고있다. 그러나 널리 사용되는 동적 메모리 할당은 이것을 이끌어 낸다. 나는 그 이유를 묻고있다. 그것의 단점에도 불구하고 사용 하는가? http://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf 전원 (10) : : C에서 http://spinroot.com/gerard/pdf/P10.pdf동적 메모리 할당의 대중적인 사용
답변
동적 메모리 할당은 일반적으로 임베디드 시스템 프로그래밍, 특히 안전에 중요한 임베디드 소프트웨어에서는 금지되어 있습니다. 안전에 중요한 소프트웨어에 대한 모든 산업 표준은 MISRA-C, DO178B, IEC 61508, ISO 26262 등을 금지합니다.
동적 메모리 할당에는 많은 논란이 있습니다. 느리고 가능하지 않은 비결정 액세스 시간 인 memory leaks 및 heap fragmentation이 있습니다.
어떤 종류의 프로그램에서도 이러한 문제가 발생하지 않습니다. 그러나 PC/데스크톱 등의 프로그래밍에서는 주류 운영 체제가 각 프로세스에 제공되는 정적 프로세스 메모리의 양을 제한하고이를 초과하여 데이터를 저장하려는 경우 주로 주류 운영 체제가 더미.
런타임까지 데이터 양을 알 수없는 경우 동적 메모리를 사용하는 것이 편리합니다. 그러나 알려진 세계에는 무제한의 메모리가있는 컴퓨터가 없기 때문에 "나는 완전히 다른 양의 데이터를 사용하고 싶다. 나는 얼마나 많은지 모르겠다."라고 말도 안되는 주장이다. 적절한 소프트웨어 엔지니어는 항상 최악의 시나리오를 위해 설계합니다.
특히 RAM 용량이 제한되어 있고 메모리 부족 메시지 상자보다 버그의 결과가 훨씬 더 많은 임베디드 시스템의 경우 프로그램에 100 % 결정적 동작이 있어야합니다. "이 프로그램은 RAM이 다 떨어지기 전까지는 작동 할 것이고 그 다음에는 충돌과 화상을 일으킬 것입니다"와 같은 설계는 할 수 없습니다. 철도 감시 시스템에 가변적 인 "x"개의 열차가 존재하도록 허용 할 수 없으므로 상한선을 지정하고 그 이후에 시스템을 설계해야합니다. 동적 메모리
그래서 상관없이 모든 문제는 위에서 언급 한, 당신은 그것이 어떤 의미가되지 않습니다 단순히 때문에, 시스템의 이러한 종류의 동적 메모리를 사용하지 않습니다.
거의 동일한 이유로 이러한 시스템에서 재귀도 금지됩니다.
동적 메모리 할당은 추상적 인 수학 및 실제 엔지니어링 사이의 모호한 줄에 앉아 이러한 내 참조 JPL 기준입니다. 수학적으로 "이 데이터를 일부 메모리에 저장하십시오"라고 말하면 실제로 malloc()
은 기본적으로 "일부 메모리"를 제공하지만 기본적으로 무한한 양의 메모리가있는 것으로 가장합니다. (실제로 실제 많은 시스템에서 malloc()
은 과실로 인해 결코 실패하지 않습니다.)
실제 엔지니어링은 모든 리소스의 경계에 직면 해 있습니다. 문제가 있으면 잘 알고있는 X 사용할 수있는 메모리의 양은 다음 은 메모리가 어디로가는 지 계획해야합니다. 이것은 더 복잡하고 도전적이지만, 프로그램의 데이터 흐름에 대해주의 깊게 생각하도록 강요하는 것보다 더 나은 코드와 더 나은 성능을 이끌어 낼 수도 있습니다.
malloc()
이 결코 실패하지 않는 일반적인 데스크탑 컴퓨터와 달리, 정교한 메모리 관리자가없고 malloc()
이 "항상 실패"하는 임베디드 시스템이 있습니다. 당신이 그것없이 프로그래밍 할 수 있다면, 당신은 그런 플랫폼을 위해 프로그래밍 할 수 있습니다. 반면에 프로그래밍 스타일이 마법 메모리를 무제한으로 사용할 수 있다고 가정하면 그러한 플랫폼에서의 프로그래밍은 매우 어렵습니다.
어 ... 동적 메모리 할당 사용을 방해한다는 것은 무엇을 의미합니까? 동적 메모리 할당이없는 경우 런타임에 객체 크기를 제어 할 수 없습니다. 크기를 조절하는 배열이나 가변 길이리스트 등을 원한다면, 어떤 점에서 직접 호출이든 다른 라이브러리 호출에 의해 숨겨 지든간에 malloc이 필요할 것이다. – nchen24
일부 매우 작은 플랫폼에서는 힙이 없기 때문에. 그리고 약간 큰 플랫폼에서는 매우 결정적인 자원 사용이 필요합니다. –
@ nchen24 코딩 및 JPL 코딩 표준의 10 가지 규칙은 동적 메모리 할당 사용을 금지합니다. – achoora