Advertisement

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

概要

引数

  • const void *p

実装

ggc-page.c

1309 /* Return the size of the gc-able object P.  */
1310 
1311 size_t
1312 ggc_get_size (const void *p)
1313 {
1314   page_entry *pe = lookup_page_table_entry (p);
1315   return OBJECT_SIZE (pe->order);
1316 }

ggc-zone.c =

1449 /* Return the size of the gc-able object P.  */
1450 
1451 size_t
1452 ggc_get_size (const void *p)
1453 {
1454   struct page_entry *page;
1455   const char *ptr = (const char *) p;
1456 
1457   page = zone_get_object_page (p);
1458 
1459   if (page->pch_p)
1460     {
1461       size_t alloc_word, alloc_bit, offset, max_size;
1462       offset = (ptr - pch_zone.page) / BYTES_PER_ALLOC_BIT + 1;
1463       alloc_word = offset / (8 * sizeof (alloc_type));
1464       alloc_bit = offset % (8 * sizeof (alloc_type));
1465       max_size = pch_zone.bytes - (ptr - pch_zone.page);
1466       return zone_object_size_1 (pch_zone.alloc_bits, alloc_word, alloc_bit,
1467                                  max_size);
1468     }
1469 
1470   if (page->large_p)
1471     return ((struct large_page_entry *)page)->bytes;
1472   else
1473     return zone_find_object_size ((struct small_page_entry *) page, p);
1474 }



リンク元

特に記載のない限り、コミュニティのコンテンツはCC-BY-SA ライセンスの下で利用可能です。