목록IT (165)
And Brain said,
엔디언(Endian) 행진곡 0. 멀티바이트의 질서있는 행진 1. 빅이냐 리틀이냐 그것이 문제로다 2. Rust로 다시 쓰여지다 3. 제1장: Network 4. 제2장: FIle 5. 행진이 끝나고 예제 코드 엔디언은 또한 네트워크 통신에서도 중요한 역할을 합니다. 대부분의 네트워크 프로토콜은 빅 엔디언, 또는 '네트워크 바이트 오더'를 사용합니다. 먼저, 네트워크 패킷을 다루는 경우에는 고수준의 API 기능들로는 충분하지 않을 수 있습니다. 저수준의 네트워크 프로그래밍에서는 엔디언에 대한 이해가 필수적입니다. 이때 엔디언 변환이 필요하게 됩니다. Rust로 작성된 간단한 패킷 구조체를 생성하고, 이를 바이트 배열로 변환한 다음 다시 원래의 구조체로 복원해 보겠습니다. use byteorder::{Bi..
엔디언(Endian) 행진곡 0. 멀티바이트의 질서있는 행진 1. 빅이냐 리틀이냐 그것이 문제로다 2. Rust로 다시 쓰여지다 3. 제1장: Network 4. 제2장: FIle 5. 행진이 끝나고 예제 코드 이제 Rust를 이용해 실제로 엔디언 변환을 해보도록 합시다. Rust에서는 'byteorder' 라는 crate를 이용해 간편하게 엔디언 변환을 할 수 있습니다. 이 crate를 사용하여, 쉽게 데이터 바이트의 순서를 변경해보도록 합시다. 먼저, Cargo.toml 파일에 라이브러리를 추가해줍시다. [dependencies] byteorder = "1.4.3" 자, 이제 간단한 엔디언 변환 예제를 작성해봅시다. use byteorder::{BigEndian, ByteOrder, LittleEnd..
엔디언(Endian) 행진곡 0. 멀티바이트의 질서있는 행진 1. 빅이냐 리틀이냐 그것이 문제로다 2. Rust로 다시 쓰여지다 3. 제1장: Network 4. 제2장: FIle 5. 행진이 끝나고 예제 코드 > '빅 엔디언'과 '리틀 엔디언'은 데이터를 메모리에 어떻게 배치할지를 결정하는 엔디언 방식의 두 가지 주요 유형입니다. 먼저 빅 엔디언과 리틀 엔디언의 차이점을 다시 한 번 살펴볼까요? 빅 엔디언 방식을 먼저 살펴봅시다. 이 방식에서는 가장 중요한 바이트(Most Significant Byte, MSB)가 낮은 메모리 주소에 위치하게 됩니다. 이것은 숫자를 읽거나 쓸 때 일반적으로 사용하는 방식과 유사합니다. 즉, 12345678이라는 숫자를 읽을 때 1이 가장 먼저 오는 것처럼, 빅 엔디언 ..
엔디언(Endian) 행진곡 0. 멀티바이트의 질서있는 행진 1. 빅이냐 리틀이냐 그것이 문제로다 2. Rust로 다시 쓰여지다 3. 제1장: Network 4. 제2장: FIle 5. 행진이 끝나고 예제 코드 여기 멀티바이트 데이터들이 행진을 준비하고 있습니다. 그들은 메모리 도로 위에 서서, 시작을 기다리고 있습니다. 한쪽 끝에서 다른 쪽 끝까지, 그런데 우리는 문득 궁금증이 생깁니다. 이들은 대체 어떤 순서로 메모리에 위치할까요? 엔디언(Endianness, 줄여서 Endian)은 바로 이 데이터 바이트들이 어떤 순서로 메모리에 위치할지를 결정하는 규칙입니다. 엔디언은 크게 두 가지 유형이 있습니다. 빅 엔디언과 리틀 엔디언입니다. 두 방식 모두 동일한 멀티바이트 데이터에 적용되지만, 데이터 바이트..
LLVM (Low Level Virtual Machine)은 컴파일러와 툴체인 프로젝트의 모음으로, 이는 고수준 언어에서 저수준 언어로의 변환과 최적화를 관리하는 프레임워크입니다. 이름은 Virtual Machine 이지만, LLVM은 기술적으로 가상 머신은 아닙니다. LLVM은 각각의 컴파일 단계에서 프로그램의 소스 코드를 최적화할 수 있는 기능을 제공하고, 이를 가능하게 하는 중간 표현 방식(MIR; Middle Intermediate Representation)을 사용합니다. 이 중간 표현 방식은 고수준 소스 코드를 저수준 머신 코드로 변환하는 과정에서 중간 단계를 형성하며, 이를 통해 컴파일러는 다양한 최적화 기법을 적용할 수 있습니다. 이러한 최적화 기법은 코드의 실행 속도를 빠르게 하거나, ..