1.18 GB/s에서 제로 힙 할당: ForgeZero 4.0.x 심층 분석

발행: (2026년 5월 26일 AM 12:14 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

성능 지표

MetricResult
Data throughput~1.18 GB/s 지속 상태
File hashing (100 MB)~78–84 ms
Memory footprint핫‑패스 실행 전체에서 0 allocs/op
goos: linux
goarch: amd64
BenchmarkHadesEngine/Process100MB-8   14   78411200 ns/op   0 B/op   0 allocs/op

핵심 실행 경로에서 힙 할당을 완전히 피함으로써 ForgeZero는 Go의 가비지 컬렉터를 전면 차단하고, C나 Rust와 유사한 결정론적 레이턴시를 달성합니다.

아키텍처 개요

ForgeZero의 컴파일러 아키텍처는 세 개의 내부 레이어에 의존합니다. 파일‑시스템 서브‑엔진(fs, seal, 그리고 링커/어셈블러 모듈)은 힙 할당을 없애기 위해 완전히 재구성되었습니다.

파일 시스템 서브 엔진

  • 미리 할당된 메모리 영역 및 슬라이딩 링 버퍼.
  • 경로 문자열을 직접 string → []byte 헤더(unsafe.Pointer)로 처리하여 일반적인 힙 할당 비용을 회피합니다.
  • 재귀 스캔 중에 새로운 바이트 슬라이스나 문자열이 생성되지 않습니다.

동적 병렬화

  • 단일 파일: 입력 파일을 객체 타깃에 직접 매핑합니다.

    fz -asm boot.asm
  • 디렉터리: 전체 구조를 재귀적으로 파싱합니다.

    fz -dir ./src

링크 레벨 디그레이드 시스템

  • GCC 컴파일 시도.
  • 위치 독립 실행이 실패하면 gcc -no-pie 로 대체.
  • 완전한 베어 환경을 위해 순수 ld 링크로 깔끔히 디그레이드합니다.

엄격한 베어‑메탈 제어를 위해 개발자는 대상 CLI 플래그로 자동 링크 동작을 재정의할 수 있습니다:

  • -mode c — GCC를 통해 실행을 명시적으로 고정합니다.
  • -mode raw — 안전성 오버라이드를 우회하고 원시 ld 로 관리되지 않은 바이너리를 직접 링크합니다.

패치 4.0.1 하이라이트

  • Silent‑by‑Default 파이프라인 – 오류는 -verbose 플래그를 통해 전체가 캡처되어 확인 가능하고, 성공적인 빌드는 Built: program.out와 같은 깔끔한 한 줄 상태 블록만 표시합니다.
  • 충돌 해결main.asmmain.s가 이제 교차 오염 없이 각각 main_asm.omain_s.o 컴포넌트에 올바르게 매핑됩니다.
  • 가비지 정리 – 정리된 런타임 구조는 모든 교차 컴파일 객체(.fz_objs 임시 작업공간)를 제로 할당 OS 시스템 호출을 사용해 재귀적으로 정리합니다.

설치

# 최신 베어‑메탈 빌더 패키지를 Go를 통해 직접 가져오기
go install github.com/forgezero-cli/forgezero@latest

기본 어셈블리 도구(nasm, fasm, ld 등)가 시스템 $PATH에 전역으로 존재하는지 확인하십시오.

공식 ForgeZero GitHub 저장소에서 완전 테스트된 소스 트리, 아키텍처 사양 및 문서를 확인해 보세요.

0 조회
Back to Blog

관련 글

더 보기 »

러스트 언어 성능 [PDF]

Goal Rust is defined as a safe, low‑level, system programming language directly competing with C++. How much does it pay for safety in terms of performance? Ca...