Blame include/memkind.h

Packit Service 724aca
/*
Packit Service 724aca
 * Copyright (C) 2014 - 2019 Intel Corporation.
Packit Service 724aca
 * All rights reserved.
Packit Service 724aca
 *
Packit Service 724aca
 * Redistribution and use in source and binary forms, with or without
Packit Service 724aca
 * modification, are permitted provided that the following conditions are met:
Packit Service 724aca
 * 1. Redistributions of source code must retain the above copyright notice(s),
Packit Service 724aca
 *    this list of conditions and the following disclaimer.
Packit Service 724aca
 * 2. Redistributions in binary form must reproduce the above copyright notice(s),
Packit Service 724aca
 *    this list of conditions and the following disclaimer in the documentation
Packit Service 724aca
 *    and/or other materials provided with the distribution.
Packit Service 724aca
 *
Packit Service 724aca
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS
Packit Service 724aca
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
Packit Service 724aca
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
Packit Service 724aca
 * EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
Packit Service 724aca
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Packit Service 724aca
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
Packit Service 724aca
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
Packit Service 724aca
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
Packit Service 724aca
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
Packit Service 724aca
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit Service 724aca
 */
Packit Service 724aca
Packit Service 724aca
#pragma once
Packit Service 724aca
#ifdef __cplusplus
Packit Service 724aca
extern "C" {
Packit Service 724aca
#endif
Packit Service 724aca
Packit Service 724aca
#include <sys/types.h>
Packit Service 724aca
Packit Service 724aca
/**
Packit Service 724aca
 * Header file for the memkind heap manager.
Packit Service 724aca
 * More details in memkind(3) man page.
Packit Service 724aca
 *
Packit Service 724aca
 * API standards are described in memkind(3) man page.
Packit Service 724aca
 */
Packit Service 724aca
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
#define _MEMKIND_BIT(N) (1ull << N)
Packit Service 724aca
Packit Service 724aca
/// \brief Memkind memory types
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
typedef enum memkind_memtype_t {
Packit Service 724aca
Packit Service 724aca
    /**
Packit Service 724aca
     * Select standard memory, the same as process use.
Packit Service 724aca
     */
Packit Service 724aca
    MEMKIND_MEMTYPE_DEFAULT = _MEMKIND_BIT(0),
Packit Service 724aca
Packit Service 724aca
    /**
Packit Service 724aca
     * Select high bandwidth memory (HBM).
Packit Service 724aca
     * There must be at least two memories with different bandwidth to
Packit Service 724aca
     * determine the HBM.
Packit Service 724aca
     */
Packit Service 724aca
    MEMKIND_MEMTYPE_HIGH_BANDWIDTH = _MEMKIND_BIT(1)
Packit Service 724aca
Packit Service 724aca
} memkind_memtype_t;
Packit Service 724aca
Packit Service 724aca
#undef _MEMKIND_BIT
Packit Service 724aca
Packit Service 724aca
/// \brief Memkind policy
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
typedef enum memkind_policy_t {
Packit Service 724aca
Packit Service 724aca
    /**
Packit Service 724aca
     * Allocate local memory.
Packit Service 724aca
     * If there is not enough memory to satisfy the request errno is set to
Packit Service 724aca
     * ENOMEM and the allocated pointer is set to NULL.
Packit Service 724aca
     */
Packit Service 724aca
    MEMKIND_POLICY_BIND_LOCAL = 0,
Packit Service 724aca
Packit Service 724aca
    /**
Packit Service 724aca
     * Memory locality is ignored.
Packit Service 724aca
     * If there is not enough memory to satisfy the request errno is set to
Packit Service 724aca
     * ENOMEM and the allocated pointer is set to NULL.
Packit Service 724aca
     */
Packit Service 724aca
    MEMKIND_POLICY_BIND_ALL,
Packit Service 724aca
Packit Service 724aca
    /**
Packit Service 724aca
     * Allocate preferred memory that is local.
Packit Service 724aca
     * If there is not enough preferred memory to satisfy the request or
Packit Service 724aca
     * preferred memory is not available, the allocation will fall back on any
Packit Service 724aca
     * other memory.
Packit Service 724aca
     */
Packit Service 724aca
    MEMKIND_POLICY_PREFERRED_LOCAL,
Packit Service 724aca
Packit Service 724aca
    /**
Packit Service 724aca
     * Interleave allocation across local memory.
Packit Service 724aca
     * For n memory types the allocation will be interleaved across all of
Packit Service 724aca
     * them.
Packit Service 724aca
     */
Packit Service 724aca
    MEMKIND_POLICY_INTERLEAVE_LOCAL,
Packit Service 724aca
Packit Service 724aca
    /**
Packit Service 724aca
     * Interleave allocation. Locality is ignored.
Packit Service 724aca
     * For n memory types the allocation will be interleaved across all of
Packit Service 724aca
     * them.
Packit Service 724aca
     */
Packit Service 724aca
    MEMKIND_POLICY_INTERLEAVE_ALL,
Packit Service 724aca
Packit Service 724aca
    /**
Packit Service 724aca
     * Max policy value.
Packit Service 724aca
     */
Packit Service 724aca
    MEMKIND_POLICY_MAX_VALUE
Packit Service 724aca
Packit Service 724aca
} memkind_policy_t;
Packit Service 724aca
Packit Service 724aca
/// \brief Memkind bits definition
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
/// \note The bits specify flags and masks. Bits <0,1,2,...,7> are reserved for page size, where page sizes are encoded
Packit Service 724aca
///       by base-2 logarithm. If the page size bits are set to zero value, than default page size will be used.
Packit Service 724aca
typedef enum memkind_bits_t {
Packit Service 724aca
    MEMKIND_MASK_PAGE_SIZE_2MB = 21ull,  /**<  Allocations backed by 2 MB page size (2^21 = 2MB) */
Packit Service 724aca
} memkind_bits_t;
Packit Service 724aca
Packit Service 724aca
/// \brief Memkind type definition
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
typedef struct memkind *memkind_t;
Packit Service 724aca
Packit Service 724aca
Packit Service 724aca
/// \brief Memkind constant values
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
enum memkind_const {
Packit Service 724aca
    MEMKIND_MAX_KIND = 512,                     /**<  Maximum number of kinds */
Packit Service 724aca
    MEMKIND_ERROR_MESSAGE_SIZE = 128,           /**<  Error message size */
Packit Service 724aca
    MEMKIND_PMEM_MIN_SIZE = (1024 * 1024 * 16)  /**<  The minimum size which allows to limit the file-backed memory partition */
Packit Service 724aca
};
Packit Service 724aca
Packit Service 724aca
/// \brief Memkind operation statuses
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
enum {
Packit Service 724aca
    MEMKIND_SUCCESS = 0,                        /**<  Operation success */
Packit Service 724aca
    MEMKIND_ERROR_UNAVAILABLE = -1,             /**<  Error: Memory kind is not available */
Packit Service 724aca
    MEMKIND_ERROR_MBIND = -2,                   /**<  Error: Call to mbind() failed */
Packit Service 724aca
    MEMKIND_ERROR_MMAP  = -3,                   /**<  Error: Call to mmap() failed */
Packit Service 724aca
    MEMKIND_ERROR_MALLOC = -6,                  /**<  Error: Call to malloc() failed */
Packit Service 724aca
    MEMKIND_ERROR_ENVIRON = -12,                /**<  Error: Unable to parse environment variable */
Packit Service 724aca
    MEMKIND_ERROR_INVALID = -13,                /**<  Error: Invalid argument */
Packit Service 724aca
    MEMKIND_ERROR_TOOMANY = -15,                /**<  Error: Attempt to initialize more than MEMKIND_MAX_KIND number of kinds */
Packit Service 724aca
    MEMKIND_ERROR_BADOPS = -17,                 /**<  Error: Invalid memkind_ops structure */
Packit Service 724aca
    MEMKIND_ERROR_HUGETLB = -18,                /**<  Error: Unable to allocate huge pages */
Packit Service 724aca
    MEMKIND_ERROR_MEMTYPE_NOT_AVAILABLE = -20,  /**<  Error: Requested memory type is not available */
Packit Service 724aca
    MEMKIND_ERROR_OPERATION_FAILED = -21,       /**<  Error: Operation failed */
Packit Service 724aca
    MEMKIND_ERROR_ARENAS_CREATE = -22,          /**<  Error: Call to jemalloc's arenas.create failed */
Packit Service 724aca
    MEMKIND_ERROR_RUNTIME = -255                /**<  Error: Unspecified run-time error */
Packit Service 724aca
};
Packit Service 724aca
Packit Service 724aca
/* KIND CONFIGURATION MANAGEMENT INTERFACE */
Packit Service 724aca
Packit Service 724aca
/// \brief Memkind memory usage policy
Packit Service 724aca
typedef enum memkind_mem_usage_policy {
Packit Service 724aca
    MEMKIND_MEM_USAGE_POLICY_DEFAULT      = 0,        /**<  Default memory usage */
Packit Service 724aca
    MEMKIND_MEM_USAGE_POLICY_CONSERVATIVE = 1,        /**<  Minimize memory usage at all costs, */
Packit Service 724aca
    MEMKIND_MEM_USAGE_POLICY_MAX_VALUE
Packit Service 724aca
} memkind_mem_usage_policy;
Packit Service 724aca
Packit Service 724aca
/// \brief Memkind memory statistics type
Packit Service 724aca
typedef enum memkind_stat_type {
Packit Service 724aca
    MEMKIND_STAT_TYPE_RESIDENT      = 0,        /**<  Maximum number of bytes in physically resident data pages mapped */
Packit Service 724aca
    MEMKIND_STAT_TYPE_ACTIVE        = 1,        /**<  Total number of bytes in active pages */
Packit Service 724aca
    MEMKIND_STAT_TYPE_ALLOCATED     = 2,        /**<  Total number of allocated bytes */
Packit Service 724aca
    MEMKIND_STAT_TYPE_MAX_VALUE
Packit Service 724aca
} memkind_stat_type;
Packit Service 724aca
Packit Service 724aca
/// \brief Forward declaration of memkind configuration
Packit Service 724aca
struct memkind_config;
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Create a memkind configuration
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \return Memkind configuration, NULL on failure
Packit Service 724aca
///
Packit Service 724aca
struct memkind_config *memkind_config_new(void);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Delete memkind configuration
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param cfg memkind configuration
Packit Service 724aca
///
Packit Service 724aca
void memkind_config_delete(struct memkind_config *cfg);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Update memkind configuration with path to specified directory parameter
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param cfg memkind configuration
Packit Service 724aca
/// \param pmem_dir path to specified directory for PMEM kind
Packit Service 724aca
///
Packit Service 724aca
void memkind_config_set_path(struct memkind_config *cfg, const char *pmem_dir);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Update memkind configuration with PMEM kind size
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param cfg memkind configuration
Packit Service 724aca
/// \param pmem_size size limit for PMEM kind
Packit Service 724aca
///
Packit Service 724aca
void memkind_config_set_size(struct memkind_config *cfg, size_t pmem_size);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Update memkind configuration with memory usage policy parameter
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param cfg memkind configuration
Packit Service 724aca
/// \param policy memkind memory usage policy
Packit Service 724aca
///
Packit Service 724aca
void memkind_config_set_memory_usage_policy(struct memkind_config *cfg,
Packit Service 724aca
                                            memkind_mem_usage_policy policy);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Create kind that allocates memory with specific memory type, memory binding policy and flags.
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
/// \note Currently implemented memory type and policy configurations:
Packit Service 724aca
///.      {MEMKIND_MEMTYPE_DEFAULT, MEMKIND_POLICY_PREFERRED_LOCAL},
Packit Service 724aca
///.      {MEMKIND_MEMTYPE_HIGH_BANDWIDTH, MEMKIND_POLICY_BIND_LOCAL},
Packit Service 724aca
///       {MEMKIND_MEMTYPE_HIGH_BANDWIDTH, MEMKIND_POLICY_PREFERRED_LOCAL},
Packit Service 724aca
///       {MEMKIND_MEMTYPE_HIGH_BANDWIDTH, MEMKIND_POLICY_INTERLEAVE_ALL},
Packit Service 724aca
///       {MEMKIND_MEMTYPE_DEFAULT | MEMKIND_MEMTYPE_HIGH_BANDWIDTH, MEMKIND_POLICY_INTERLEAVE_ALL}.
Packit Service 724aca
/// \param memtype_flags determine the memory types to allocate from by combination of memkind_memtype_t values.
Packit Service 724aca
///        This field cannot have zero value.
Packit Service 724aca
/// \param policy specify policy for page binding to memory types selected by  memtype_flags.
Packit Service 724aca
///        This field must be set to memkind_policy_t value. If policy is set to MEMKIND_POLICY_PREFERRED_LOCAL then only one memory
Packit Service 724aca
///        type must be selected. Note: the value cannot be set to MEMKIND_POLICY_MAX_VALUE.
Packit Service 724aca
/// \param flags the field must be set to a combination of memkind_bits_t values.
Packit Service 724aca
/// \param kind pointer to kind which will be created
Packit Service 724aca
/// \return Memkind operation status, MEMKIND_SUCCESS on success, MEMKIND_ERROR_MEMTYPE_NOT_AVAILABLE or MEMKIND_ERROR_INVALID on failure
Packit Service 724aca
///
Packit Service 724aca
int memkind_create_kind(memkind_memtype_t memtype_flags,
Packit Service 724aca
                        memkind_policy_t policy,
Packit Service 724aca
                        memkind_bits_t flags,
Packit Service 724aca
                        memkind_t *kind);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Destroy previously created kind object, which must have been returned
Packit Service 724aca
///        by a call to memkind_create_kind() or memkind_create_pmem().
Packit Service 724aca
///        The function has undefined behavior when the handle is invalid or
Packit Service 724aca
///        memkind_destroy_kind(kind) was already called before
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
/// \note if the kind was returned by memkind_create_kind() all allocated memory must be freed
Packit Service 724aca
///       before kind is destroyed, otherwise this will cause memory leak.
Packit Service 724aca
/// \param kind specified memory kind
Packit Service 724aca
/// \return Memkind operation status, MEMKIND_SUCCESS on success, MEMKIND_ERROR_OPERATION_FAILED on failure
Packit Service 724aca
///
Packit Service 724aca
int memkind_destroy_kind(memkind_t kind);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Get kind associated with allocated memory referenced by ptr
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \note This function has non-trivial performance overhead
Packit Service 724aca
/// \param ptr pointer to the allocated memory
Packit Service 724aca
/// \return Kind associated with allocated memory, NULL on failure
Packit Service 724aca
///
Packit Service 724aca
memkind_t memkind_detect_kind(void *ptr);
Packit Service 724aca
Packit Service 724aca
#include "memkind_deprecated.h"
Packit Service 724aca
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
extern memkind_t MEMKIND_REGULAR;
Packit Service 724aca
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
extern memkind_t MEMKIND_DEFAULT;
Packit Service 724aca
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
extern memkind_t MEMKIND_HUGETLB;
Packit Service 724aca
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
extern memkind_t MEMKIND_HBW;
Packit Service 724aca
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
extern memkind_t MEMKIND_HBW_ALL;
Packit Service 724aca
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
extern memkind_t MEMKIND_HBW_PREFERRED;
Packit Service 724aca
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
extern memkind_t MEMKIND_HBW_HUGETLB;
Packit Service 724aca
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
extern memkind_t MEMKIND_HBW_ALL_HUGETLB;
Packit Service 724aca
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
extern memkind_t MEMKIND_HBW_PREFERRED_HUGETLB;
Packit Service 724aca
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
extern memkind_t MEMKIND_HBW_INTERLEAVE;
Packit Service 724aca
Packit Service 724aca
/// \warning EXPERIMENTAL API
Packit Service 724aca
extern memkind_t MEMKIND_INTERLEAVE;
Packit Service 724aca
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
extern memkind_t MEMKIND_DAX_KMEM;
Packit Service 724aca
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
extern memkind_t MEMKIND_DAX_KMEM_ALL;
Packit Service 724aca
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
extern memkind_t MEMKIND_DAX_KMEM_PREFERRED;
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Get Memkind API version
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \return Version number represented by a single integer number(major * 1000000 + minor * 1000 + patch)
Packit Service 724aca
///
Packit Service 724aca
int memkind_get_version();
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Convert error number into an error message
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param err error number
Packit Service 724aca
/// \param msg error message
Packit Service 724aca
/// \param size size of message
Packit Service 724aca
///
Packit Service 724aca
void memkind_error_message(int err, char *msg, size_t size);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Create a new PMEM (file-backed) kind of given size on top of a temporary file
Packit Service 724aca
///        in the given directory dir
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param dir path to specified directory to temporary file
Packit Service 724aca
/// \param max_size size limit for kind
Packit Service 724aca
/// \param kind pointer to kind which will be created
Packit Service 724aca
/// \return Memkind operation status, MEMKIND_SUCCESS on success, other values on failure
Packit Service 724aca
///
Packit Service 724aca
int memkind_create_pmem(const char *dir, size_t max_size, memkind_t *kind);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Create a new PMEM kind with given memkind configuration
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param cfg memkind configuration for specifying PMEM parameters
Packit Service 724aca
/// \param kind pointer to kind which will be created
Packit Service 724aca
/// \return Memkind operation status, MEMKIND_SUCCESS on success, other values on failure
Packit Service 724aca
///
Packit Service 724aca
int memkind_create_pmem_with_config(struct memkind_config *cfg,
Packit Service 724aca
                                    memkind_t *kind);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Check if kind is available
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param kind specified memory kind
Packit Service 724aca
/// \return Memkind operation status, MEMKIND_SUCCESS on success, other values on failure
Packit Service 724aca
///
Packit Service 724aca
int memkind_check_available(memkind_t kind);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Update memkind cached statistics
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \return Memkind operation status, MEMKIND_SUCCESS on success, other values on failure
Packit Service 724aca
///
Packit Service 724aca
int memkind_update_cached_stats(void);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Get memkind statistic
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param kind specified memory kind
Packit Service 724aca
/// \param stat specified type of memory statistic
Packit Service 724aca
/// \param value reference to value of memory statistic
Packit Service 724aca
/// \return Memkind operation status, MEMKIND_SUCCESS on success, other values on failure
Packit Service 724aca
///
Packit Service 724aca
int memkind_get_stat(memkind_t kind, memkind_stat_type stat, size_t *value);
Packit Service 724aca
Packit Service 724aca
/* HEAP MANAGEMENT INTERFACE */
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Allocates size bytes of uninitialized storage of the specified kind
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param kind specified memory kind
Packit Service 724aca
/// \param size number of bytes to allocate
Packit Service 724aca
/// \return Pointer to the allocated memory
Packit Service 724aca
///
Packit Service 724aca
void *memkind_malloc(memkind_t kind, size_t size);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Obtain size of block of memory allocated with the memkind API
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param kind specified memory kind
Packit Service 724aca
/// \param ptr pointer to the allocated memory
Packit Service 724aca
/// \return Number of usable bytes
Packit Service 724aca
///
Packit Service 724aca
size_t memkind_malloc_usable_size(memkind_t kind, void *ptr);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Allocates memory of the specified kind for an array of num elements
Packit Service 724aca
///        of size bytes each and initializes all bytes in the allocated storage to zero
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param kind specified memory kind
Packit Service 724aca
/// \param num number of objects
Packit Service 724aca
/// \param size specified size of each element
Packit Service 724aca
/// \return Pointer to the allocated memory
Packit Service 724aca
///
Packit Service 724aca
void *memkind_calloc(memkind_t kind, size_t num, size_t size);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Allocates size bytes of the specified kind and places the address of the allocated memory
Packit Service 724aca
///        in *memptr. The address of the allocated memory will be a multiple of alignment,
Packit Service 724aca
///        which must be a power of two and a multiple of sizeof(void *)
Packit Service 724aca
/// \note EXPERIMENTAL API
Packit Service 724aca
/// \param kind specified memory kind
Packit Service 724aca
/// \param memptr address of the allocated memory
Packit Service 724aca
/// \param alignment specified alignment of bytes
Packit Service 724aca
/// \param size specified size of bytes
Packit Service 724aca
/// \return Memkind operation status, MEMKIND_SUCCESS on success, EINVAL or ENOMEM on failure
Packit Service 724aca
///
Packit Service 724aca
int memkind_posix_memalign(memkind_t kind, void **memptr, size_t alignment,
Packit Service 724aca
                           size_t size);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Reallocates memory of the specified kind
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param kind specified memory kind
Packit Service 724aca
/// \param ptr pointer to the memory block to be reallocated
Packit Service 724aca
/// \param size new size for the memory block in bytes
Packit Service 724aca
/// \return Pointer to the allocated memory
Packit Service 724aca
///
Packit Service 724aca
void *memkind_realloc(memkind_t kind, void *ptr, size_t size);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Free the memory space of the specified kind pointed by ptr
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param kind specified memory kind
Packit Service 724aca
/// \param ptr pointer to the allocated memory
Packit Service 724aca
///
Packit Service 724aca
void memkind_free(memkind_t kind, void *ptr);
Packit Service 724aca
Packit Service 724aca
///
Packit Service 724aca
/// \brief Try to reallocate allocation to reduce fragmentation
Packit Service 724aca
/// \note STANDARD API
Packit Service 724aca
/// \param kind specified memory kind
Packit Service 724aca
/// \param ptr pointer to the allocated memory
Packit Service 724aca
/// \return Pointer to newly transferred allocated memory
Packit Service 724aca
///
Packit Service 724aca
void *memkind_defrag_reallocate(memkind_t kind, void *ptr);
Packit Service 724aca
Packit Service 724aca
#ifdef __cplusplus
Packit Service 724aca
}
Packit Service 724aca
#endif