You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hmz007 36ed224bac
Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a)
1 year ago
..
README.md Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
aligned_memory.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
aligned_memory.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
aligned_memory_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
discardable_memory.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
discardable_memory.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
discardable_memory_allocator.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
discardable_memory_allocator.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
discardable_memory_backing_field_trial_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
discardable_memory_internal.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
discardable_shared_memory.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
discardable_shared_memory.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
discardable_shared_memory_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
free_deleter.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
madv_free_discardable_memory_allocator_posix.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
madv_free_discardable_memory_allocator_posix.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
madv_free_discardable_memory_allocator_posix_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
madv_free_discardable_memory_posix.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
madv_free_discardable_memory_posix.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
madv_free_discardable_memory_posix_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
memory_pressure_listener.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
memory_pressure_listener.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
memory_pressure_listener_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
memory_pressure_monitor.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
memory_pressure_monitor.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
nonscannable_memory.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
nonscannable_memory.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
page_size.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
page_size_nacl.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
page_size_posix.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
page_size_win.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_handle.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_handle.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_mapper.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_mapper_android.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_mapper_fuchsia.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_mapper_mac.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_mapper_posix.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_mapper_win.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_region.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_region.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_region_android.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_region_fuchsia.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_region_mac.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_region_posix.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_region_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
platform_shared_memory_region_win.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ptr_util.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ptr_util_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
raw_ptr.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
raw_ptr.md Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
raw_ptr_asan_bound_arg_tracker.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
raw_ptr_asan_bound_arg_tracker.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
raw_ptr_asan_hooks.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
raw_ptr_asan_hooks.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
raw_ptr_asan_service.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
raw_ptr_asan_service.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
raw_ptr_asan_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
raw_ptr_exclusion.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
raw_ref.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
raw_scoped_refptr_mismatch_checker.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
read_only_shared_memory_region.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
read_only_shared_memory_region.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ref_counted.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ref_counted.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ref_counted_delete_on_sequence.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ref_counted_memory.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ref_counted_memory.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ref_counted_memory_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ref_counted_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ref_counted_unittest.nc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
rust_cfg_win_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
safe_ref.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
safe_ref_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
scoped_policy.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
scoped_refptr.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
shared_memory_hooks.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
shared_memory_hooks_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
shared_memory_mapper.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
shared_memory_mapper.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
shared_memory_mapping.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
shared_memory_mapping.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
shared_memory_mapping_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
shared_memory_region_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
shared_memory_security_policy.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
shared_memory_security_policy.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
shared_memory_tracker.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
shared_memory_tracker.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
singleton.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
singleton_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
stack_allocated.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
unsafe_shared_memory_pool.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
unsafe_shared_memory_pool.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
unsafe_shared_memory_pool_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
unsafe_shared_memory_region.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
unsafe_shared_memory_region.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
values_equivalent.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
values_equivalent_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
weak_auto_reset.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
weak_auto_reset_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
weak_ptr.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
weak_ptr.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
weak_ptr_unittest.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
weak_ptr_unittest.nc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
writable_shared_memory_region.cc Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
writable_shared_memory_region.h Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago

README.md

//base/memory Types

Overview

This directory contains a variety of pointer-like objects (aka smart pointers). This is a brief overview of what they are and how they should be used. Refer to individual header files for details. C++ is not memory safe, so use these types to help guard against potential memory bugs. There are other pointer-like object types implemented elsewhere that may be right for a given use case, such as absl::optional<T> and std::unique_ptr<T>. More on all types in video form here and in a doc here.

raw_ptr<T>

Use for class fields/members that would otherwise be a T*.

This is a weakly refcounted wrapper for a T* (also called a raw pointer). When the object is deleted, the allocator will "poison" the memory that object occupied and keep the memory around so its not reused. This reduces the risk and impact of a use-after-free bug.

Depending on the use case, it's possible a smart pointer with additional features would be more appropriate, but if none of those are applicable or necessary, raw_ptr<T> is preferred over a T*.

For more information, see raw_ptr.md; for guidance on usage, see the style guide.

raw_ref<T>

Use for class fields/members that would otherwise be a T&.

This shares much in common with raw_ptr<T>, but asserts that the raw_ref<T> is not nullable.

For more information, see raw_ptr.md; for guidance on usage, see the style guide.

base::WeakPtr<T>

Use when a reference to an object might outlive the object itself.

These are useful for asynchronous work, which is common in Chrome. If an async task references other objects or state, and it's possible for that state to be destroyed before the task runs, those references should be held in a WeakPtr<T>. Each WeakPtr<T> is associated with a WeakPtrFactory<T>. When the associated factory (usually owned by T) is destroyed, all WeakPtr<T> are invalidated (becomes null) rather than becoming use-after-frees. If such references should never outlive the object, consider using SafeRef instead.

base::SafeRef<T>

Use to express that a reference to an object must not outlive the object.

An example is if you have a class member that you want to guarantee outlives the class itself. SafeRef automatically enforces the lifetime assumptions and eliminates the need for validity checks.

If the assumption that the object is valid is broken, then the process terminates safely and generates a crash report. Though not ideal, it's preferable to a potentially undiscovered security bug.

This type is built on top of WeakPtr, so if you want a SafeRef<T>, T needs a WeakPtrFactory as a member. It works like WeakPtr, but doesn't allow for a null state. There's also overlap with raw_ptr, though this was implemented first.

base::scoped_refptr<T>

Use when you want manually managed strong refcounting. Use carefully!

Its an owning smart pointer, so it owns a pointer to something allocated in the heap and gives shared ownership of the underlying object, since it can be copied. When all scoped_refptrs pointing to the same object are gone, that object gets destroyed.

This is Chrome's answer to std::shared_ptr<T>. It additionally requires T to inherit from RefCounted or RefCountedThreadSafe, since the ref counting happens in the object itself, unlike shared_ptr<T>. It's preferred for an object to remain on the same thread, as RefCounted is much cheaper. If there are scoped_refptrs to the same object on different threads, use RefCountedThreadSafe, since accesses to the reference count can race. In this case, without external synchronization, the destructor can run on any thread. If the destructor interacts with other systems it is important to control and know which thread has the last reference to the object, or you can end up with flakiness.