32 lines
1.3 KiB
C
32 lines
1.3 KiB
C
|
|
// smallsegment_v5_box.h - SmallSegment v5(Phase v5-0)
|
|||
|
|
//
|
|||
|
|
// 2MiB Segment / 64KiB Page ベースの O(1) page_meta lookup
|
|||
|
|
|
|||
|
|
#ifndef HAKMEM_SMALLSEGMENT_V5_BOX_H
|
|||
|
|
#define HAKMEM_SMALLSEGMENT_V5_BOX_H
|
|||
|
|
|
|||
|
|
#include <stdint.h>
|
|||
|
|
#include "smallobject_hotbox_v5_box.h"
|
|||
|
|
|
|||
|
|
#define SMALL_SEGMENT_V5_SIZE (2 * 1024 * 1024) // 2 MiB
|
|||
|
|
#define SMALL_SEGMENT_V5_PAGE_SIZE (64 * 1024) // 64 KiB
|
|||
|
|
#define SMALL_SEGMENT_V5_NUM_PAGES (SMALL_SEGMENT_V5_SIZE / SMALL_SEGMENT_V5_PAGE_SIZE) // 32
|
|||
|
|
#define SMALL_SEGMENT_V5_MAGIC 0xDEADBEEF
|
|||
|
|
#define SMALL_SEGMENT_V5_PAGE_SHIFT 16 // log2(64KiB)
|
|||
|
|
|
|||
|
|
// SmallSegmentV5: セグメント構造体
|
|||
|
|
typedef struct SmallSegmentV5 {
|
|||
|
|
uintptr_t base; // セグメント先頭アドレス
|
|||
|
|
uint32_t num_pages; // ページ数(通常は 32)
|
|||
|
|
uint32_t owner_tid; // オーナースレッド ID
|
|||
|
|
uint32_t magic; // 0xDEADBEEF for validation
|
|||
|
|
SmallPageMetaV5 page_meta[SMALL_SEGMENT_V5_NUM_PAGES]; // page metadata array
|
|||
|
|
} SmallSegmentV5;
|
|||
|
|
|
|||
|
|
// API(v5-0 では宣言のみ、実装は v5-2)
|
|||
|
|
SmallSegmentV5* small_segment_v5_acquire(void);
|
|||
|
|
void small_segment_v5_release(SmallSegmentV5* seg);
|
|||
|
|
SmallPageMetaV5* small_segment_v5_page_meta_of(void* ptr);
|
|||
|
|
|
|||
|
|
#endif // HAKMEM_SMALLSEGMENT_V5_BOX_H
|