런타임에 힙에 버퍼 할당

semtexzv

저는 간단한 바이너리 디코더를 작성하여 Rust를 배우고 있습니다.

숫자를 읽기 BufferedReader위해 byteorder 크레이트 와 함께 a 사용하고 있지만 바이트 버퍼를 읽는 데 문제가 있습니다.

런타임에 할당 된 버퍼로 바이트 데이터를 읽고 싶습니다. 그런 다음이 버퍼의 소유권을 구조체에 전달하고 싶습니다. 구조체가 더 이상 사용되지 않으면 버퍼를 할당 해제해야합니다.

일부 Vec::with_capacity()해킹을 제외하고는 힙에서 런타임에 크기가 결정된 배열을 할당 할 방법이없는 것 같습니다 . 적절한 Rust 의미론으로 이것을 구현하는 방법에 대한 아이디어가 있습니까?

매튜 엠.

Rust는 저수준 언어입니다. 따라서 원시 메모리를 할당 한 다음 객체로 직접 채울 수 있습니다. 물론 unsafe원시 메모리를 조작하는 모든 사람과 마찬가지로 코드 가 필요 합니다.

다음은 완전한 예입니다 .

use std::{
    alloc::{self, Layout},
    mem, ptr,
};

fn main() {
    unsafe {
        let layout = Layout::from_size_align(512 * 1024, 4 * 1024).expect("Invalid layout");
        let mut raw: *mut i32 = mem::transmute(alloc::alloc(layout));

        for i in 0..(512 * 1024 / 4) {
            ptr::write(raw, i as i32);
            raw = raw.offset(1)
        }
    }
}

물론 실제 코드에서는 Vec메모리를 안전하게 관리하는 데 사용 합니다. 더 간단합니다!

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

예상, 버퍼에 출력 할당

분류에서Dev

런타임에 힙 손상을 해결할 수 없습니다.

분류에서Dev

Python에서 런타임시 객체에 메서드 할당

분류에서Dev

런타임에 할당 된 함수의 const 변수

분류에서Dev

런타임에 동적으로 속성 할당

분류에서Dev

c에서 버퍼 할당을위한 파일 크기 결정

분류에서Dev

버퍼에 대한 비 차단 또는 차단 할당?

분류에서Dev

버퍼를 만들고 Python에서 포인터를 할당

분류에서Dev

메모리 할당 실패 : PHP, SoapClient에서 버퍼 증가

분류에서Dev

cudaHostAllocMapped도 장치에 버퍼를 할당합니까?

분류에서Dev

cython 할당 버퍼를 파이썬에 전달

분류에서Dev

헤더 파일에서 버퍼 할당 가능성

분류에서Dev

Java에서 Equals 메서드를 오버로드 할 때 런타임시 동작

분류에서Dev

C의 힙에 구조체 할당

분류에서Dev

힙에 할당 vs 재귀 함수에서 스택에 할당

분류에서Dev

MSDN : "이 클래스와 해당 멤버는 Windows 런타임에서 실행되는 응용 프로그램에서 사용할 수 없습니다."

분류에서Dev

런타임 MVC 5에서 ViewModel을 View에 동적으로 할당

분류에서Dev

C에서 버퍼 (구조체 유형)에 대한 메모리 할당

분류에서Dev

런타임 오류 : Python에서 래퍼를 사용할 때 알 수없는 MATLAB 위치

분류에서Dev

런타임에서 동적 버튼에 대한 버튼 클릭 이벤트를 실행할 수 없습니다.

분류에서Dev

C 런타임 오류 : For 루프에서 동적으로 메모리 할당

분류에서Dev

C ++ : 버퍼에 값을 할당하면 작동하지 않습니다.

분류에서Dev

컴파일 타임 상수 벡터를 힙 할당 버전으로 변환

분류에서Dev

파이썬에서 런타임에 chromedriver.exe 버전을 확인할 수 있습니까?

분류에서Dev

런타임에 combineLatest (또는 유사)에 옵저버 블을 추가 할 수 있습니까?

분류에서Dev

모든 멤버에 할당 된 메모리로 힙에 구조체 배열을 만듭니다.

분류에서Dev

런타임에 클릭 할 때 버튼의 색상을 어떻게 변경할 수 있습니까?

분류에서Dev

런타임 포인터없이 래퍼 클래스에 대한 멤버 액세스

분류에서Dev

런타임에 프로토콜 버퍼 스키마를 컴파일하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    예상, 버퍼에 출력 할당

  2. 2

    런타임에 힙 손상을 해결할 수 없습니다.

  3. 3

    Python에서 런타임시 객체에 메서드 할당

  4. 4

    런타임에 할당 된 함수의 const 변수

  5. 5

    런타임에 동적으로 속성 할당

  6. 6

    c에서 버퍼 할당을위한 파일 크기 결정

  7. 7

    버퍼에 대한 비 차단 또는 차단 할당?

  8. 8

    버퍼를 만들고 Python에서 포인터를 할당

  9. 9

    메모리 할당 실패 : PHP, SoapClient에서 버퍼 증가

  10. 10

    cudaHostAllocMapped도 장치에 버퍼를 할당합니까?

  11. 11

    cython 할당 버퍼를 파이썬에 전달

  12. 12

    헤더 파일에서 버퍼 할당 가능성

  13. 13

    Java에서 Equals 메서드를 오버로드 할 때 런타임시 동작

  14. 14

    C의 힙에 구조체 할당

  15. 15

    힙에 할당 vs 재귀 함수에서 스택에 할당

  16. 16

    MSDN : "이 클래스와 해당 멤버는 Windows 런타임에서 실행되는 응용 프로그램에서 사용할 수 없습니다."

  17. 17

    런타임 MVC 5에서 ViewModel을 View에 동적으로 할당

  18. 18

    C에서 버퍼 (구조체 유형)에 대한 메모리 할당

  19. 19

    런타임 오류 : Python에서 래퍼를 사용할 때 알 수없는 MATLAB 위치

  20. 20

    런타임에서 동적 버튼에 대한 버튼 클릭 이벤트를 실행할 수 없습니다.

  21. 21

    C 런타임 오류 : For 루프에서 동적으로 메모리 할당

  22. 22

    C ++ : 버퍼에 값을 할당하면 작동하지 않습니다.

  23. 23

    컴파일 타임 상수 벡터를 힙 할당 버전으로 변환

  24. 24

    파이썬에서 런타임에 chromedriver.exe 버전을 확인할 수 있습니까?

  25. 25

    런타임에 combineLatest (또는 유사)에 옵저버 블을 추가 할 수 있습니까?

  26. 26

    모든 멤버에 할당 된 메모리로 힙에 구조체 배열을 만듭니다.

  27. 27

    런타임에 클릭 할 때 버튼의 색상을 어떻게 변경할 수 있습니까?

  28. 28

    런타임 포인터없이 래퍼 클래스에 대한 멤버 액세스

  29. 29

    런타임에 프로토콜 버퍼 스키마를 컴파일하는 방법은 무엇입니까?

뜨겁다태그

보관