임베디드 응용 프로그램에서 이진 파일을 제한된 메모리로 읽어 들이고 최소 시간 내에 구문 분석해야합니다. 시간을 최소화하면서 포인터를 최소화하는 방법
전체 파일
읽고 메모리가 할당 될 수있다 : 각대안 4 바이트의 적어도 240 포인터 발생할
char **array = malloc(sizeof(char *) * row);
for(char c = 0; c < 240; c++){ /*320 x 240 file*/
array[c] = malloc(320);
}
: 포인터를 최소화
array = malloc(320*240);
을 구문 분석 중 각 액세스마다 곱셈이 발생합니다. 하드웨어 곱셈이 없으면 시간이 많이 걸릴 것입니다.
구문 분석을 위해 한 번에 적어도 세 개의 행이 메모리에 필요합니다.
SD 카드에서 읽기가 느리고 한 번에 한 줄씩 읽는다고 확신하지 않으며 파싱은 전체 파일을 한 번에 읽은 다음 구문 분석하는 것보다 느립니다.
이 질문에 대한 대답은 프로세서의 메모리 크기 요구 사항을 결정합니다. 물론, 더 작은 프로세서는 더 싸고, 그것은 큰 요소이지만, 구문 분석 시간은 아마도 더 큰 요소 일 것입니다.
한 번에 3 개의 행만 필요한 경우이 3 개의 행을 할당 할 수는 없습니까? – AntonH
테스트 할 수 없습니까? 프로세서가 없다면 테스트 만 빌릴 수는 없습니까? 실제 하드웨어에서 실제 프로파일 링없이 더 빠를 것이라고 말하는 것은 매우 어렵습니다. – bolov
여하튼 우리는이 프로젝트에서 당신에게 더 중요한 것을 말할 수 없습니다. 속도와 공간 사이에는 항상 균형이 있으며 임베디드를 선택하면 더욱 중요합니다. 결국 계산을 가속화 할 수있는 CPU 관련 기술을 한 번 결정하거나 찾아야합니다. – AntonH