Skip to content

Latest commit

 

History

History
43 lines (26 loc) · 1.62 KB

README.md

File metadata and controls

43 lines (26 loc) · 1.62 KB
by just-do-halee

Today I learned

2022-9-16


  • Rust::Embedded

    • ::#![no_std]

      • Standard Library(std)가 아닌 Core Library(core)에 링크하겠다는 crate-level 지시자이다. 축약해서, 운영체제에 의존하지 않겠다는 선언이다.

      • no_stdstd의 차이:

        no_std

        no_std는 Heap과 Collections가 기본적으로 주어지지 않는다. 다만 하드웨어에 따른 Allocator를 따로 지정해줘야 하는 작업이 필요하다. 또한 Stack Overflow Protection이 존재하지 않는다. 표준 라이브러리(libstd) 대신 코어 라이브러리(libcore)만 사용할 수 있다. 마지막으로, 펌웨어(firmware), 커널(kernal), 부트로더(bootloader) 등 개발이 가능해진다. 운영체제 의존인 기존 std로는 불가능했다.


    • ::[profile.release]

      • 프로그램의 바이너리 사이즈를 줄일 수 있는 옵션이 몇 가지 존재한다.

        [profile.release]
        strip = true # Automatically strip symbols from the binary
        opt-level = "s" # Optimize for size, not runtime speed
        lto = true # Enable link time optimization
        codegen-units = 1 # Maximize size reduction optimizations

        또는 cargo-bloat CLI의 힘을 빌릴 수도 있겠다(이때에는 stripfalse로 두고 실행해야 한다.)

        자세한 사항들은 min-sized-rust를 참고하면 된다.