> 백엔드 개발 > C++ > C에서 공백으로 구분된 부동 소수점을 구문 분석하는 가장 빠른 방법은 무엇입니까?

C에서 공백으로 구분된 부동 소수점을 구문 분석하는 가장 빠른 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-03 10:19:11
원래의
518명이 탐색했습니다.

What are the Fastest Methods for Parsing Space-Separated Floats in C  ?

C에서 공백으로 구분된 부동 소수점을 빠르게 구문 분석하는 방법

공백으로 구분된 부동 소수점을 구문 분석하는 것은 특히 대용량 파일을 처리할 때 시간이 많이 걸리는 작업일 수 있습니다. 표준 C 스트림을 사용하는 것과 같은 기존 방법은 속도가 느릴 수 있습니다. 이 기사에서는 C에서 부동 소수점을 구문 분석하는 몇 가지 효율적인 방법을 살펴봅니다.

Boost Spirit

Boost Spirit은 고급 구문 분석 기능을 제공하는 강력한 C 라이브러리입니다. 초기 학습 곡선에도 불구하고 Spirit은 빠르고 안정적인 구문 분석을 제공합니다. 사용 방법은 다음과 같습니다.

#include <boost/spirit/include/qi.hpp>

namespace qi = boost::spirit::qi;

int main() {
  std::string line = "134.32 3545.87 3425";

  double x, y, z;
  auto it = line.begin();
  bool success = qi::phrase_parse(it, line.end(), qi::double_ >> qi::double_ >> qi::double_, qi::blank, data);

  if (success) {
    std::cout << "Parsed values: " << x << " " << y << " " << z << std::endl;
  }

  return 0;
}
로그인 후 복사

메모리 매핑 파일

메모리 매핑 파일은 기존 I/O 작업의 오버헤드 없이 파일을 메모리로 읽어오는 더 빠른 방법을 제공합니다. 이렇게 하면 구문 분석 속도가 크게 향상될 수 있습니다.

#include <iostream>
#include <fstream>
#include <sys/stat.h>
#include <sys/mman.h>

int main() {
  std::ifstream file("data.txt");
  struct stat statbuf;
  fstat(file.fileno(), &statbuf);

  // Memory-map the file
  char* data = static_cast<char*>(mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED, file.fileno(), 0));

  // Iterate through the data to parse floats
  for (char* ptr = data; ptr < data + statbuf.st_size;) {
    double x, y, z;
    ptr = std::sscanf(ptr, "%f %f %f", &x, &y, &z);
    // Parse the float values and perform desired operations
  }

  // Unmap the file
  munmap(data, statbuf.st_size);

  return 0;
}
로그인 후 복사

벤치마크

다양한 구문 분석 방법을 벤치마킹하여 속도 차이를 입증했습니다. Boost Spirit이 가장 빠른 것으로 나타났고, 메모리 매핑 파일 접근 방식과 표준 C 스트림이 그 뒤를 이었습니다. 정확한 성능은 데이터의 크기와 복잡성에 따라 달라질 수 있습니다.

결론

C에서 공백으로 구분된 부동 소수점 구문 분석은 다양한 기술을 사용하여 최적화할 수 있습니다. Boost Spirit은 최고의 성능을 제공하지만 구문 분석 메커니즘에 대한 더 많은 이해가 필요합니다. 메모리 매핑된 파일은 코드 단순성을 유지하면서 구문 분석 속도를 높이는 중간 지점을 제공합니다. 기존 C 스트림은 계산 속도가 느리지만 여전히 실행 가능한 옵션으로 남아 있습니다.

위 내용은 C에서 공백으로 구분된 부동 소수점을 구문 분석하는 가장 빠른 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿