v8/include/cppgc
Anton Bikineev 92eae6d126 cppgc: Force EBO to always work with GCed
Currently, in the following struct

struct LayoutObject : GarbageCollected<>, MixinA, MixinB {};

the subobject that corresponds to the first base GarbageCollected<>
always takes up some space (one word). The empty-base-optimization
doesn't happen because the second base (MixinA) has the same subobject
as the first base (GarbageCollected), which is the most parent class
GarbageCollectedBase. The compiler can't "merge" them because it must
guarantee that distinct objects of the same type have distinct
addresses.

The attribute [[no_unique_address]] doesn't work for base classes,
unfortunately (but is a good idea for a Standard proposal). As a
solution, the CL simply removes GarbageCollectedBase.

Bug: chromium:1260797
Change-Id: I415b10a5fbcebce3d6ee97b8870ea9ae90f383a8
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3259654
Commit-Queue: Anton Bikineev <bikineev@chromium.org>
Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/main@{#77693}
2021-11-03 22:23:59 +00:00
..
internal cppgc: Move interesting checks behind DEBUG 2021-10-26 07:37:11 +00:00
allocation.h cppgc: Provide alignment attribute to allocations functions 2021-10-12 18:16:26 +00:00
common.h cppgc: Random style fixes and comment updates 2021-01-26 22:43:44 +00:00
cross-thread-persistent.h cppgc: Fix CTP destruction 2021-08-31 12:13:01 +00:00
custom-space.h cppgc: Fix CustomSpace trait 2021-01-27 16:48:28 +00:00
default-platform.h cppgc: Fix and merge cppgc samples 2020-11-26 09:12:35 +00:00
DEPS cppgc: Use libplatform as default platform 2020-10-08 18:16:52 +00:00
ephemeron-pair.h cppgc: Check ephemerons for unset key 2021-02-12 16:55:00 +00:00
explicit-management.h cppgc: Adjust explicit management calls 2021-05-05 14:18:37 +00:00
garbage-collected.h cppgc: Force EBO to always work with GCed 2021-11-03 22:23:59 +00:00
heap-consistency.h cppgc: Add GetWriteBarrierType that ignores slots 2021-09-16 12:53:21 +00:00
heap-state.h cppgc: Add WasConservativeGC to HeapState 2021-02-25 22:54:05 +00:00
heap-statistics.h cppgc: Wire up discarded size 2021-07-12 16:03:50 +00:00
heap.h cppgc: IWYU cleanups 2021-05-20 10:42:29 +00:00
liveness-broker.h cppgc: LivenessBroker: Treat nullptr as live 2021-08-11 11:59:31 +00:00
macros.h cppgc: IWYU cleanups 2021-05-20 10:42:29 +00:00
member.h cppgc: Allow CrossThreadPersistent to access poisoned memory from GC 2021-07-21 19:11:01 +00:00
name-provider.h cppgc: NameProvider:GetName() -> NameProvider::GetHumanReadableName() 2021-06-08 15:56:46 +00:00
object-size-trait.h cppgc: Fix compilation error on older gcc compilers 2021-01-22 23:13:30 +00:00
OWNERS cppgc: Make bikineev and omerkatz owners of include/cppgc 2020-08-28 08:05:30 +00:00
persistent.h cppgc: Check same thread accesses to PersistentRegion 2021-09-30 09:55:10 +00:00
platform.h cppgc: Drop high-address stack assumption 2021-08-16 10:18:04 +00:00
prefinalizer.h cppgc: Support virtual prefinalizers 2021-09-27 12:29:52 +00:00
process-heap-statistics.h cppgc: Implement process-global state accessors. 2021-02-17 22:37:24 +00:00
README.md cppgc: Update README 2021-08-24 11:56:53 +00:00
sentinel-pointer.h [cleanup][include] Remove redundant NOLINT annotations 2021-04-30 16:22:19 +00:00
source-location.h cppgc: IWYU cleanups 2021-05-20 10:42:29 +00:00
testing.h cppgc: Implement testing APIs 2021-04-06 13:44:29 +00:00
trace-trait.h cppgc: Fix IsGarabgeCollected trait and friends 2021-01-22 16:20:46 +00:00
type-traits.h Reland "cppgc: Implement basic Member and Persistent checks" 2021-05-10 12:31:05 +00:00
visitor.h cppgc: Allow CrossThreadPersistent to access poisoned memory from GC 2021-07-21 19:11:01 +00:00

Oilpan: C++ Garbage Collection

Oilpan is an open-source garbage collection library for C++ that can be used stand-alone or in collaboration with V8's JavaScript garbage collector.

Key properties

  • Trace-based garbage collection;
  • Precise on-heap memory layout;
  • Conservative on-stack memory layout;
  • Allows for collection with and without considering stack;
  • Incremental and concurrent marking;
  • Incremental and concurrent sweeping;
  • Non-incremental and non-concurrent compaction for selected spaces;

See the Hello World example on how to get started using Oilpan to manage C++ code.

Oilpan follows V8's project organization, see e.g. on how we accept contributions and provide a stable API.