Skip to content
Beside the Wheel
Search
Ctrl
K
Cancel
Email
GitHub
Select theme
Dark
Light
Auto
공부
(5)
spot 인스턴스에서 서버 가용성 개선하기
eBPF로 서버 성능 Profiling하는 법: Pyroscope의 구현 살펴보기
정수론부터 RSA까지
strace로 shaka-packager 버그 추적
Kubernetes The Hard Way
TIL
(957)
AI
(43)
DevOps
(230)
Network
(61)
OS
(155)
개발
(113)
데이터베이스
(65)
서버
(72)
수학
(20)
알고리즘
(24)
암호학
(32)
언어
(113)
컴퓨터구조
(5)
코드
(24)
독후감
(43)
과학
(1)
사회
(2)
산문
(3)
소설
(12)
인문
(11)
자기계발
(7)
철학
(7)
생각
(6)
고민
변화에 대하여
의식의 영역에 대하여
본질을 보려면
짧은 생각들
소유냐 존재냐
회고
(14)
2022.03-04 대덕소마고 입학소감/다짐
2022.05-08 프로젝트와 인간관계
2022.09-2023.02 불안과 판단
2023.03-07 DMS 리더 회고
2023.08-11 나는 누구인가?
2023.12 더 많은 걸 배우기 위한 경험
2024.01-02 회사 인턴 회고
2024.03-04 고3 근황
2024.05-07 고등학교 마무리
2024.08-12 첫 회사
2025.01-03 입출력
2025.03-08 효능감이란 무엇일까
2025.09-12 연말회고
2026.01-08 담론
Email
GitHub
Select theme
Dark
Light
Auto
태그: 메모리-참조
총 5개의 글이 있습니다.
temporary value is freed
메모리-참조
2024. 4. 19.
Rust에서 `temporary value is freed` 에러는 임시 값이 사용되기 전에 해제될 때 발생한다. 임시 값이 스코프를 벗어나 메모리가 해제되었는데, 해제된 값에 대한 참조가 여전히 남아있으면 이 에러가 발생한다. 이 에러를 방지하려면 값의 라이프타임이 실제 사용 범위와 일치하도록 소유권을 올바르게 관리해야 한다. 예시 rust let mut did_config = "{}"; let seed_input = options.value_of("seed").unwrap_or("tbd"); if (seed_input != "tbd") { let json_config = json!({ "seed": seed_input }); did_config = json_c
Rc 타입과 Weak 타입
메모리-참조
2024. 3. 23.
소유권 규칙에 따라 Rust에서 어떤 값은 여러 소유자를 가질 수 없다. Reference Counted를 의미하는 `Rc`는 힙 메모리에 할당된 타입 `T` 값의 소유권을 공유할 수 있게 해주는 타입이다. 즉, 스마트 포인터 `Rc`를 사용하면 타입 `T`의 값에 대한 여러 개의 소유자를 만들 수 있다. 기본적으로, `Rc` 타입은 Clone Trait을 구현하고 있고 clone을 호출해서 `T` 값에 대한 새로운 포인터를 생성하며, 모든 `Rc` 포인터가 해제되면 메모리에 할당된 `T` 값이 drop되는 구조이다. Rust에서 공유된 참조자는 수정할 수 없는데, Rc 타입 또한 예외가 아니며 일반적인 방법으로는 mutable한 참조를 얻을 수 없다. 만약, mutable 한 참조가 필요하면 `Ce
Unwrap
메모리-참조
2024. 3. 23.
unwrap을 호출한 객체는 기본적으로 복사를 수행한다. 복사와 소유권 이동 둘다 가능한 시점에서 복사가 발생한다. rust fn main() { let s = Some(12); let a = s.unwrap(); println!("{}", a); let b = s.unwrap(); println!("{}", b); } 복사를 수행하기 위해서는 해당 타입이 Copy 트레잇을 구현해야 한다. 복사가 안된다면 메모리 소유권 이동이 발생한다. rust struct MyStruct{ x:i32, y:i32, } fn main() { let s = Some(MyStruct { x: 123,
소유권과 Lifetime
메모리-참조
2024. 3. 23.
기본적으로 모든 변수 바인딩은 유효한 “범위(스코프)“를 가지며, 범위 밖에서 변수 사용하면 에러가 발생한다. 스코프가 종료되면 변수는 “삭제(drop)“되었다고 하며 그 변수의 데이터는 메모리에서 해제된다. Rust에서는 스코프가 종료될 때 다른 리소스를 해제하기 위해 소멸자가 호출되도록 하는 것을 변수가 값을 소유한다고 정의한다. 러스트의 각각의 값은 해당값의 오너(owner)라고 불리우는 변수를 갖고 있으며 한번에 딱 하나의 오너만 존재할 수 있다. rust fn main() { let s1: String = String::from("Rust"); let s2: String = s1; } 위 코드는 `"Rust"`라는 String 값에 대한 소유권을 `s1`에서 `
스마트 포인터 활용
메모리-참조
2024. 3. 23.
스마트 포인터(Smart Pointer)는 포인터처럼 작동하지만 추가적인 메타데이터와 능력들도 가지고 있는 데이터 구조이다. `String`과 `Vec`는 스마트 포인터이다. 스마트 포인터는 보통 구조체를 이용하여 구현되어 있다. 스마트 포인터가 일반적인 구조체와 구분되는 특성은 스마트 포인터가 `Deref`와 `Drop` 트레잇을 구현한다는 것이다. `Deref` 트레잇은 스마트 포인터 구조체의 인스턴스가 참조자처럼 동작하도록 하여, 참조자나 스마트 포인터 둘 중 하나와 함께 작동하는 코드를 작성하게 해준다. 스마트 포인터가 평범한 참조자처럼 취급될 수 있도록 구현한다. `Deref`를 구현한 구조체에 대해 `*`로 값을 참조하면, `deref` 함수를 호출한 후 `*`를 한번 호출하는 것으로