1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+ < head >
4+ < meta charset ="UTF-8 ">
5+ < title > Heap Memory Structure</ title >
6+ < style >
7+ @import url ('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Space+Grotesk:wght@300;500;700&display=swap' );
8+
9+ * { margin : 0 ; padding : 0 ; box-sizing : border-box; }
10+
11+ body {
12+ background : # 0d0d14 ;
13+ display : flex;
14+ align-items : center;
15+ justify-content : center;
16+ min-height : 100vh ;
17+ font-family : 'JetBrains Mono' , monospace;
18+ }
19+
20+ .diagram {
21+ width : 820px ;
22+ padding : 48px ;
23+ }
24+
25+ .title {
26+ text-align : center;
27+ color : # e0e0ff ;
28+ font-size : 13px ;
29+ letter-spacing : 0.2em ;
30+ text-transform : uppercase;
31+ margin-bottom : 40px ;
32+ opacity : 0.5 ;
33+ }
34+
35+ /* HEAP */
36+ .heap {
37+ background : rgba (100 , 120 , 255 , 0.04 );
38+ border : 1.5px solid rgba (100 , 120 , 255 , 0.25 );
39+ border-radius : 16px ;
40+ padding : 28px ;
41+ position : relative;
42+ }
43+
44+ .heap-label {
45+ position : absolute;
46+ bottom : -36px ;
47+ left : 50% ;
48+ transform : translateX (-50% );
49+ color : # 6478ff ;
50+ font-size : 11px ;
51+ letter-spacing : 0.15em ;
52+ text-transform : uppercase;
53+ display : flex;
54+ align-items : center;
55+ gap : 8px ;
56+ white-space : nowrap;
57+ }
58+
59+ .heap-label ::before , .heap-label ::after {
60+ content : '' ;
61+ display : block;
62+ width : 60px ;
63+ height : 1px ;
64+ background : # 6478ff ;
65+ opacity : 0.4 ;
66+ }
67+
68+ /* SEGMENTS row */
69+ .segments {
70+ display : flex;
71+ gap : 12px ;
72+ }
73+
74+ /* SEGMENT */
75+ .segment {
76+ flex : 1 ;
77+ background : rgba (80 , 200 , 180 , 0.04 );
78+ border : 1.5px solid rgba (80 , 200 , 180 , 0.25 );
79+ border-radius : 12px ;
80+ padding : 14px ;
81+ position : relative;
82+ }
83+
84+ .segment-label {
85+ position : absolute;
86+ bottom : -30px ;
87+ left : 50% ;
88+ transform : translateX (-50% );
89+ color : # 50c8b4 ;
90+ font-size : 10px ;
91+ letter-spacing : 0.12em ;
92+ text-transform : uppercase;
93+ white-space : nowrap;
94+ }
95+
96+ /* PAGES column inside segment */
97+ .pages {
98+ display : flex;
99+ flex-direction : column;
100+ gap : 6px ;
101+ }
102+
103+ /* PAGE */
104+ .page {
105+ background : rgba (255 , 200 , 100 , 0.04 );
106+ border : 1px solid rgba (255 , 200 , 100 , 0.2 );
107+ border-radius : 6px ;
108+ padding : 5px 6px ;
109+ display : flex;
110+ gap : 4px ;
111+ position : relative;
112+ }
113+
114+ /* CHUNK */
115+ .chunk {
116+ flex : 1 ;
117+ height : 10px ;
118+ background : rgba (255 , 200 , 100 , 0.15 );
119+ border : 1px solid rgba (255 , 200 , 100 , 0.3 );
120+ border-radius : 2px ;
121+ transition : background 0.2s ;
122+ }
123+
124+ .chunk : hover {
125+ background : rgba (255 , 200 , 100 , 0.4 );
126+ }
127+
128+ /* Highlight one page + segment for labels */
129+ .segment : nth-child (2 ) .page : nth-child (3 ) {
130+ border-color : rgba (255 , 200 , 100 , 0.6 );
131+ }
132+
133+ /* Legend */
134+ .legend {
135+ margin-top : 60px ;
136+ display : flex;
137+ justify-content : center;
138+ gap : 40px ;
139+ }
140+
141+ .legend-item {
142+ display : flex;
143+ align-items : center;
144+ gap : 10px ;
145+ font-size : 11px ;
146+ letter-spacing : 0.1em ;
147+ }
148+
149+ .legend-swatch {
150+ width : 24px ;
151+ height : 12px ;
152+ border-radius : 3px ;
153+ border : 1.5px solid;
154+ }
155+
156+ .l-heap { border-color : # 6478ff ; background : rgba (100 , 120 , 255 , 0.15 ); color : # 6478ff ; }
157+ .l-seg { border-color : # 50c8b4 ; background : rgba (80 , 200 , 180 , 0.15 ); color : # 50c8b4 ; }
158+ .l-page { border-color : rgba (255 , 200 , 100 , 0.7 ); background : rgba (255 , 200 , 100 , 0.12 ); color : # ffc864 ; }
159+ .l-chunk { border-color : rgba (255 , 200 , 100 , 0.9 ); background : rgba (255 , 200 , 100 , 0.4 ); color : # ffc864 ; }
160+
161+ .legend-item span { color : # 888 ; }
162+
163+ /* size arrow */
164+ .size-arrow {
165+ margin-top : 48px ;
166+ display : flex;
167+ align-items : center;
168+ justify-content : center;
169+ gap : 0 ;
170+ color : # 444 ;
171+ font-size : 10px ;
172+ letter-spacing : 0.15em ;
173+ }
174+
175+ .arrow-line {
176+ display : flex;
177+ align-items : center;
178+ gap : 12px ;
179+ }
180+
181+ .arrow-track {
182+ width : 300px ;
183+ height : 2px ;
184+ background : linear-gradient (to left, # 6478ff44, # ffc86444 );
185+ position : relative;
186+ }
187+
188+ .arrow-track ::before {
189+ content : '◂' ;
190+ position : absolute;
191+ left : -8px ;
192+ top : -8px ;
193+ color : # ffc864 ;
194+ font-size : 14px ;
195+ }
196+
197+ .arrow-track ::after {
198+ content : '▸' ;
199+ position : absolute;
200+ right : -8px ;
201+ top : -8px ;
202+ color : # 6478ff ;
203+ font-size : 14px ;
204+ }
205+
206+ .label-small { color : # ffc864 ; font-size : 10px ; letter-spacing : 0.1em ; }
207+ .label-large { color : # 6478ff ; font-size : 10px ; letter-spacing : 0.1em ; }
208+ </ style >
209+ </ head >
210+ < body >
211+ < div class ="diagram ">
212+ < div class ="title "> Memory Allocator — Hierarchy</ div >
213+
214+ < div class ="heap ">
215+ <!-- 4 segments -->
216+ < div class ="segments ">
217+
218+ <!-- Segment 1 -->
219+ < div class ="segment ">
220+ < div class ="pages ">
221+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
222+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
223+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
224+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
225+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
226+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
227+ </ div >
228+ </ div >
229+
230+ <!-- Segment 2 — labeled -->
231+ < div class ="segment " id ="s2 ">
232+ < div class ="pages ">
233+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
234+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
235+ < div class ="page " id ="highlighted-page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
236+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
237+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
238+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
239+ </ div >
240+ </ div >
241+
242+ <!-- Segment 3 -->
243+ < div class ="segment ">
244+ < div class ="pages ">
245+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
246+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
247+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
248+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
249+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
250+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
251+ </ div >
252+ </ div >
253+
254+ <!-- Segment 4 -->
255+ < div class ="segment ">
256+ < div class ="pages ">
257+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
258+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
259+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
260+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
261+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
262+ < div class ="page "> < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > < div class ="chunk "> </ div > </ div >
263+ </ div >
264+ </ div >
265+
266+ </ div >
267+ < div class ="heap-label "> Heap</ div >
268+ </ div >
269+
270+ <!-- Legend -->
271+ < div class ="legend ">
272+ < div class ="legend-item ">
273+ < div class ="legend-swatch l-heap "> </ div >
274+ < span class ="l-heap " style ="color:#6478ff "> Heap</ span >
275+ </ div >
276+ < div class ="legend-item ">
277+ < div class ="legend-swatch l-seg "> </ div >
278+ < span class ="l-seg " style ="color:#50c8b4 "> Segment</ span >
279+ </ div >
280+ < div class ="legend-item ">
281+ < div class ="legend-swatch l-page "> </ div >
282+ < span style ="color:#ffc864 "> Page</ span >
283+ </ div >
284+ < div class ="legend-item ">
285+ < div class ="legend-swatch l-chunk "> </ div >
286+ < span style ="color:#ffc864 "> Chunk</ span >
287+ </ div >
288+ </ div >
289+
290+ <!-- Size scale -->
291+ < div class ="size-arrow ">
292+ < div class ="arrow-line ">
293+ < span class ="label-small "> smallest</ span >
294+ < div class ="arrow-track "> </ div >
295+ < span class ="label-large "> largest</ span >
296+ </ div >
297+ </ div >
298+
299+ </ div >
300+
301+ < style >
302+ /* add segment label on hover for s2 only — cleaner */
303+ .segment { transition : border-color 0.2s ; }
304+ .segment : hover { border-color : rgba (80 , 200 , 180 , 0.5 ); }
305+ .page : hover { border-color : rgba (255 , 200 , 100 , 0.5 ); }
306+
307+ /* extra style for the heap wrapper bottom spacing */
308+ .heap { margin-bottom : 48px ; }
309+
310+ /* annotate one segment and one page with a subtle callout */
311+ </ style >
312+
313+ <!-- SVG callout arrows overlay -->
314+ < svg style ="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible " id ="arrows "> </ svg >
315+
316+ </ body >
317+ </ html >
0 commit comments