GCC Wikia
Advertisement

このページを編集する際は,編集に関する方針に従ってください.[]

概要[]

引数[]

実装[]

 854 /* Allocate a large page of size SIZE in ZONE.  */
855 
856 static struct large_page_entry *
857 alloc_large_page (size_t size, struct alloc_zone *zone)
858 {
859   struct large_page_entry *entry;
860   char *page;
861   size_t needed_size;
862 

~
*必要な大きさメモリを確保する

863   needed_size = size + sizeof (struct large_page_entry);
864   page = xmalloc (needed_size);
865 
866   entry = (struct large_page_entry *) page;
867 

~
*値を格納していく

868   entry->next = NULL;
869   entry->common.page = page + sizeof (struct large_page_entry);
870   entry->common.large_p = true;
871   entry->common.pch_p = false;
872   entry->common.zone = zone;
873 #ifdef GATHER_STATISTICS
874   entry->common.survived = 0;
875 #endif
876   entry->mark_p = false;
877   entry->bytes = size;
878   entry->prev = NULL;
879 

~
*ページのテーブルにエントリーをセットする

880   set_page_table_entry (entry->common.page, &entry->common);
881 


~
*デバッグレベルによっては情報を出力する

882   if (GGC_DEBUG_LEVEL >= 2)
883     fprintf ([[G>struct globals]].debug_file,
884              "Allocating %s large page at %p, data %p-%p\n",
885              entry->common.zone->name, (PTR) entry, entry->common.page,
886              entry->common.page + SMALL_PAGE_SIZE - 1);

~

887 
888   return entry;
889 }


リンク元

Advertisement