Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/memory/build/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 5 kB image not shown  

Quelle  mozmemory_wrap.h   Sprache: C

 
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


#ifndef mozmemory_wrap_h
#define mozmemory_wrap_h

// This header contains #defines which tweak the names of various memory
// allocation functions.
//
// There are several types of functions related to memory allocation
// that are meant to be used publicly by the Gecko codebase:
//
// - malloc implementation functions:
//   - malloc
//   - posix_memalign
//   - aligned_alloc
//   - calloc
//   - realloc
//   - free
//   - memalign
//   - valloc
//   - malloc_usable_size
//   - malloc_good_size
//   Some of these functions are specific to some systems, but for
//   convenience, they are treated as being cross-platform, and available
//   as such.
//
// - duplication functions:
//   - strndup
//   - strdup
//   - wcsdup (Windows only)
//
// - jemalloc specific functions:
//   - jemalloc_stats
//   - jemalloc_stats_num_bins
//   - jemalloc_purge_freed_pages
//   - jemalloc_free_dirty_pages
//   - jemalloc_thread_local_arena
//   - jemalloc_ptr_info
//   (these functions are native to mozjemalloc)
//
// These functions are all exported as part of libmozglue (see
// $(topsrcdir)/mozglue/build/Makefile.in), with a few implementation
// peculiarities:
//
// - On Windows, the malloc implementation functions are all prefixed with
//   "je_", the duplication functions are prefixed with "wrap_", and jemalloc
//   specific functions are left unprefixed. All these functions are however
//   aliased when exporting them, such that the resulting mozglue.dll exports
//   them unprefixed (see $(topsrcdir)/mozglue/build/mozglue.def.in). The
//   prefixed malloc implementation and duplication functions are not
//   exported.
//
// - On MacOSX, the system libc has a zone allocator, which allows us to
//   hook custom malloc implementation functions without exporting them.
//   However, since we want things in Firefox to skip the system zone
//   allocator, the malloc implementation functions are all exported
//   unprefixed, as well as duplication functions.
//   Jemalloc-specific functions are also left unprefixed.
//
// - On Android all functions are left unprefixed.
//
// - On other systems (mostly Linux), all functions are left unprefixed.
//
// On all platforms, C++ allocation functions are also exported.
//
// Proper exporting of the various functions is done with the MOZ_MEMORY_API
// and MOZ_JEMALLOC_API macros. MOZ_MEMORY_API is meant to be used for malloc
// implementation and duplication functions, while MOZ_JEMALLOC_API is
// dedicated to jemalloc specific functions.
//
//
// All these functions are meant to be called with no prefix from Gecko code.
// In most cases, this is because that's how they are available at runtime.
// However, on Android, this relies on faulty.lib (the custom dynamic linker)
// resolving mozglue symbols before libc symbols, which is guaranteed by the
// way faulty.lib works (it respects the DT_NEEDED order, and libc always
// appears after mozglue ; which we double check when building anyways)
//
//
// Within libmozglue (when MOZ_MEMORY_IMPL is defined), all the functions
// should be suffixed with "_impl" both for declarations and use.
// That is, the implementation declaration for e.g. strdup would look like:
//   char* strdup_impl(const char *)
// That implementation would call malloc by using "malloc_impl".

#if defined(MOZ_MEMORY_IMPL) && !defined(IMPL_MFBT)
#  ifdef MFBT_API  // mozilla/Types.h was already included
#    error mozmemory_wrap.h has to be included before mozilla/Types.h when MOZ_MEMORY_IMPL is set and IMPL_MFBT is not.
#  endif
#  define IMPL_MFBT
#endif

#include "mozilla/Types.h"

#ifndef MOZ_EXTERN_C
#  ifdef __cplusplus
#    define MOZ_EXTERN_C extern "C"
#  else
#    define MOZ_EXTERN_C
#  endif
#endif

#ifdef MOZ_MEMORY_IMPL
#  define MOZ_JEMALLOC_API MOZ_EXTERN_C MFBT_API
#  define MOZ_JEMALLOC_API_NODISCARD MOZ_EXTERN_C [[nodiscard]] MFBT_API
#  if defined(XP_WIN)
#    define mozmem_malloc_impl(a) je_##a
#  else
#    define MOZ_MEMORY_API MOZ_EXTERN_C MFBT_API
#  endif
#endif
#ifdef XP_WIN
#  define mozmem_dup_impl(a) wrap_##a
#endif

#if !defined(MOZ_MEMORY_IMPL)
#  define MOZ_MEMORY_API MOZ_EXTERN_C MFBT_API
#  define MOZ_JEMALLOC_API MOZ_EXTERN_C MFBT_API
#  define MOZ_JEMALLOC_API_NODISCARD MOZ_EXTERN_C [[nodiscard]] MFBT_API
#endif

#ifndef MOZ_MEMORY_API
#  define MOZ_MEMORY_API MOZ_EXTERN_C
#endif
#ifndef MOZ_JEMALLOC_API
#  define MOZ_JEMALLOC_API MOZ_EXTERN_C
#  define MOZ_JEMALLOC_API_NODISCARD MOZ_EXTERN_C [[nodiscard]]
#endif

#ifndef mozmem_malloc_impl
#  define mozmem_malloc_impl(a) a
#endif
#ifndef mozmem_dup_impl
#  define mozmem_dup_impl(a) a
#endif

// Malloc implementation functions
#define malloc_impl mozmem_malloc_impl(malloc)
#define posix_memalign_impl mozmem_malloc_impl(posix_memalign)
#define aligned_alloc_impl mozmem_malloc_impl(aligned_alloc)
#define calloc_impl mozmem_malloc_impl(calloc)
#define realloc_impl mozmem_malloc_impl(realloc)
#define free_impl mozmem_malloc_impl(free)
#define memalign_impl mozmem_malloc_impl(memalign)
#define valloc_impl mozmem_malloc_impl(valloc)
#define malloc_usable_size_impl mozmem_malloc_impl(malloc_usable_size)
#define malloc_good_size_impl mozmem_malloc_impl(malloc_good_size)

// Duplication functions
#define strndup_impl mozmem_dup_impl(strndup)
#define strdup_impl mozmem_dup_impl(strdup)
#ifdef XP_WIN
#  define wcsdup_impl mozmem_dup_impl(wcsdup)
#  define _aligned_malloc_impl mozmem_dup_impl(_aligned_malloc)
#endif

// String functions
#ifdef ANDROID
// Bug 801571 and Bug 879668, libstagefright uses vasprintf, causing malloc()/
// free() to be mismatched between bionic and mozglue implementation.
#  define vasprintf_impl mozmem_dup_impl(vasprintf)
#  define asprintf_impl mozmem_dup_impl(asprintf)
#endif

#endif  // mozmemory_wrap_h

100%


¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.