최근에 녹을 많이 읽었지만 아직도 산화하기 시작했습니다. 내 두뇌는 C/C++ 반사 신경의 대부분을 유지하므로 녹이 어떻게 진행되는지에 대해이 질문이 관련이 없다면 나를 용서해주십시오.Rust와 함께 할당 된 힙 메모리를 분할하고 사용하는 방법은 무엇입니까?
일반적으로 힙에 임의 크기의 블록을 할당 한 다음 작은 크기의 메모리 덩어리에 대한 소유권을 갖는 바인딩을 사용하여 데이터 구조를 매핑 할 수 있습니까? C99를 사용
, 하나는이 쓸 수 있습니다 :
typedef unsigned char BYTE;
typedef struct {
size_t size;
BYTE payload[];
} flex;
// ...
flex * flex_new(size_t _size) {
flex *f = malloc(sizeof(flex) + _size * sizeof(BYTE));
f->size = _size;
return f;
}
유연한 길이 배열 유용한 예를 들어 증명할 수 있습니다 가변 크기의 청크가있는 메모리 풀을 구현할 때 또는 스레드 전용의 힙에 메모리를 할당 할 때. 런타임시에만 필요한 크기를 요구하는 데이터 구조는 '원자 적'방식으로 할당되고 멤버는 연속적으로 패킹됩니다.
필자는 유사한 녹 구현이 가능한지 (unsafe
구조가없는) 궁금하고 궁금하다. 어쩌면 컴파일러는 struct
정의에서 평생 지정자를 사용하여 일부 정보를 유추 할 수 있습니까? 의 측면에서
아마 좋은 용도가있을 수 있지만 그렇다면 '안전하지 않은 것'을 사용하는 것 같습니다. 'Vec'은''(length, capacity, items) ''포인터가 아닌'(ptr, length, capacity)'트리플입니다. ,'Arena'는 절대로 크기가 조정되지 않는 Vec에 피기 백합니다. – delnan
나는'Arena'에 대해 몰랐으며 한번에 살펴볼 것입니다. 감사합니다! 안전한 인터페이스가'std'에서 또는 그 인터페이스의 후보로 제공되는 한'안전하지 않은'것이 사용되는지는 신경 쓰지 말아야한다. – dummydev
@delnan이 답변으로 추가해야하는 것처럼 들립니다.^_^ – Shepmaster