このページを編集する際は,編集に関する方針に従ってください.[]
概要[]
- gcc-4.1.0/gcc/ggc-zone.c, gcc-4.1.0/gcc/ggc-page.cにて定義
- globalな変数
実装[]
ggc-zone.c[]
346 /* The global variables. */
347 static struct globals
348 {
349 /* The linked list of zones. */
- zoneの線形連結リスト
350 struct alloc_zone *zones;
351
352 /* Lookup table for associating allocation pages with object addresses. */
353 page_table lookup;
354
355 /* The system's page size, and related constants. */
356 size_t pagesize;
357 size_t lg_pagesize;
358 size_t page_mask;
359
360 /* The size to allocate for a small page entry. This includes
361 the size of the structure and the size of the allocation
362 bitmap. */
363 size_t small_page_overhead;
364
365 #if defined (HAVE_MMAP_DEV_ZERO)
366 /* A file descriptor open to /dev/zero for reading. */
367 int dev_zero_fd;
368 #endif
369
370 /* Allocate pages in chunks of this size, to throttle calls to memory
371 allocation routines. The first page is used, the rest go onto the
372 free list. */
373 size_t quire_size;
374
375 /* The file descriptor for debugging output. */
376 FILE *debug_file;
377 } G;
gcc-page.c[]
333 /* The rest of the global variables. */
334 static struct globals
335 {
336 /* The Nth element in this array is a page with objects of size 2^N.
337 If there are any pages with free objects, they will be at the
338 head of the list. NULL if there are no page-entries for this
339 object size. */
340 page_entry *pages[NUM_ORDERS];
341
342 /* The Nth element in this array is the last page with objects of
343 size 2^N. NULL if there are no page-entries for this object
344 size. */
345 page_entry *page_tails[NUM_ORDERS];
346
347 /* Lookup table for associating allocation pages with object addresses. */
348 page_table lookup;
349
350 /* The system's page size. */
351 size_t pagesize;
352 size_t lg_pagesize;
353
354 /* Bytes currently allocated. */
355 size_t allocated;
356
357 /* Bytes currently allocated at the end of the last collection. */
358 size_t allocated_last_gc;
359
360 /* Total amount of memory mapped. */
361 size_t bytes_mapped;
362
363 /* Bit N set if any allocations have been done at context depth N. */
364 unsigned long context_depth_allocations;
365
366 /* Bit N set if any collections have been done at context depth N. */
367 unsigned long context_depth_collections;
368
369 /* The current depth in the context stack. */
370 unsigned short context_depth;
371
372 /* A file descriptor open to /dev/zero for reading. */
373 #if defined (HAVE_MMAP_DEV_ZERO)
374 int dev_zero_fd;
375 #endif
376
377 /* A cache of free system pages. */
378 page_entry *free_pages;
379
380 #ifdef USING_MALLOC_PAGE_GROUPS
381 page_group *page_groups;
382 #endif
383
384 /* The file descriptor for debugging output. */
385 FILE *debug_file;
386
387 /* Current number of elements in use in depth below. */
388 unsigned int depth_in_use;
389
390 /* Maximum number of elements that can be used before resizing. */
391 unsigned int depth_max;
392
393 /* Each element of this arry is an index in by_depth where the given
394 depth starts. This structure is indexed by that given depth we
395 are interested in. */
396 unsigned int *depth;
397
398 /* Current number of elements in use in by_depth below. */
399 unsigned int by_depth_in_use;
400
401 /* Maximum number of elements that can be used before resizing. */
402 unsigned int by_depth_max;
403
404 /* Each element of this array is a pointer to a page_entry, all
405 page_entries can be found in here by increasing depth.
406 index_by_depth in the page_entry is the index into this data
407 structure where that page_entry can be found. This is used to
408 speed up finding all page_entries at a particular depth. */
409 page_entry **by_depth;
410
411 /* Each element is a pointer to the saved in_use_p bits, if any,
412 zero otherwise. We allocate them all together, to enable a
413 better runtime data access pattern. */
414 unsigned long **save_in_use;
415
416 #ifdef ENABLE_GC_ALWAYS_COLLECT
417 /* List of free objects to be verified as actually free on the
418 next collection. */
419 struct free_object
420 {
421 void *object;
422 struct free_object *next;
423 } *free_object_list;
424 #endif
425
426 #ifdef GATHER_STATISTICS
427 struct
428 {
429 /* Total memory allocated with ggc_alloc. */
430 unsigned long long total_allocated;
431 /* Total overhead for memory to be allocated with ggc_alloc. */
432 unsigned long long total_overhead;
433
434 /* Total allocations and overhead for sizes less than 32, 64 and 128.
435 These sizes are interesting because they are typical cache line
436 sizes. */
437
438 unsigned long long total_allocated_under32;
439 unsigned long long total_overhead_under32;
440
441 unsigned long long total_allocated_under64;
442 unsigned long long total_overhead_under64;
443
444 unsigned long long total_allocated_under128;
445 unsigned long long total_overhead_under128;
446
447 /* The allocations for each of the allocation orders. */
448 unsigned long long total_allocated_per_order[NUM_ORDERS];
449
450 /* The overhead for each of the allocation orders. */
451 unsigned long long total_overhead_per_order[NUM_ORDERS];
452 } stats;
453 #endif
454 } G;