Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/runtime/memory/mem-common.ins
ViewVC logotype

Annotation of /sml/trunk/src/runtime/memory/mem-common.ins

Parent Directory Parent Directory | Revision Log Revision Log


Revision 250 - (view) (download) (as text)

1 : monnier 249 /* mem-common.ins
2 :     *
3 :     * This is code that is common to all three implementations of the
4 :     * memory management library.
5 :     */
6 :    
7 :     #ifndef _MEM_COMMON_INS_
8 :     #define _MEM_COMMON_INS_
9 :    
10 :     PVT Addr_t PageSize; /* the system page size. */
11 :     PVT Addr_t PageShift; /* PageSize == (1 << PageShift) */
12 :     PVT Addr_t VMSizeB; /* The amount of virtual memory allocated */
13 :    
14 :     PVT status_t MapMemory (mem_obj_t *obj, Addr_t szb);
15 :     PVT void UnmapMemory (mem_obj_t *obj);
16 :    
17 :    
18 :     /* InitMemory:
19 :     *
20 :     * Initialize the common stuff.
21 :     *
22 :     */
23 :     PVT void InitMemory ()
24 :     {
25 :     int i, j;
26 :    
27 :     VMSizeB = 0;
28 :     PageSize = GETPAGESIZE();
29 :     for (i = 1, j = 0; i != PageSize; i <<= 1, j++)
30 :     continue;
31 :     PageShift = j;
32 :    
33 :     } /* end of InitMemory */
34 :    
35 :    
36 :     /* MEM_GetVMSize:
37 :     *
38 :     * Return the amount of virtual memory (in K-bytes) allocated to the heap.
39 :     */
40 :     long MEM_GetVMSize ()
41 :     {
42 :     return (VMSizeB / ONE_K);
43 :    
44 :     } /* end of MEM_GetVMSize */
45 :    
46 :    
47 :     /* MEM_AllocMemObj:
48 :     * Get a new memory object from the O.S. Return NIL on failure, otherwise return
49 :     * a pointer to the object descriptor.
50 :     */
51 :     mem_obj_t *MEM_AllocMemObj (Word_t szb)
52 :     {
53 :     Word_t alloc_szb;
54 :     mem_obj_t *obj;
55 :    
56 :     if ((obj = ALLOC_MEMOBJ()) == NIL(mem_obj_t *)) {
57 :     Error ("unable to malloc chunk descriptor\n");
58 :     return NIL(mem_obj_t *);
59 :     }
60 :    
61 :     alloc_szb = (szb <= BIBOP_PAGE_SZB) ? BIBOP_PAGE_SZB : RND_MEMOBJ_SZB(szb);
62 :    
63 :     if (MapMemory (obj, alloc_szb) == FAILURE) {
64 :     FREE_MEMOBJ (obj);
65 :     return NIL(mem_obj_t *);
66 :     }
67 :    
68 :     VMSizeB += alloc_szb;
69 :    
70 :     return obj;
71 :    
72 :     } /* end of AllocMemObj */
73 :    
74 :     /* MEM_FreeMemObj:
75 :     */
76 :     void MEM_FreeMemObj (mem_obj_t *obj)
77 :     {
78 :     if (obj == NIL(mem_obj_t *))
79 :     return;
80 :    
81 :     UnmapMemory(obj);
82 :    
83 :     VMSizeB -= obj->sizeB;
84 :    
85 :     FREE_MEMOBJ (obj);
86 :    
87 :     } /* end of MEM_FreeMemObj */
88 :    
89 :     #endif /* !_MEM_COMMON_INS_ */

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0