/* * Copyright 2008-2018 NVIDIA Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /*! \file thrust/system/cpp/memory.h * \brief Managing memory associated with Thrust's standard C++ system. */ #pragma once #include #include #include #include #include #include namespace thrust { namespace system { namespace cpp { /*! Allocates an area of memory available to Thrust's cpp system. * \param n Number of bytes to allocate. * \return A cpp::pointer pointing to the beginning of the newly * allocated memory. A null cpp::pointer is returned if * an error occurs. * \note The cpp::pointer returned by this function must be * deallocated with \p cpp::free. * \see cpp::free * \see std::malloc */ inline pointer malloc(std::size_t n); /*! Allocates a typed area of memory available to Thrust's cpp system. * \param n Number of elements to allocate. * \return A cpp::pointer pointing to the beginning of the newly * allocated elements. A null cpp::pointer is returned if * an error occurs. * \note The cpp::pointer returned by this function must be * deallocated with \p cpp::free. * \see cpp::free * \see std::malloc */ template inline pointer malloc(std::size_t n); /*! Deallocates an area of memory previously allocated by cpp::malloc. * \param ptr A cpp::pointer pointing to the beginning of an area * of memory previously allocated with cpp::malloc. * \see cpp::malloc * \see std::free */ inline void free(pointer ptr); // XXX upon c++11 // template // using allocator = thrust::mr::stateless_resource_allocator; /*! \p cpp::allocator is the default allocator used by the \p cpp system's containers such as * cpp::vector if no user-specified allocator is provided. \p cpp::allocator allocates * (deallocates) storage with \p cpp::malloc (\p cpp::free). */ template struct allocator : thrust::mr::stateless_resource_allocator< T, memory_resource > { private: typedef thrust::mr::stateless_resource_allocator< T, memory_resource > base; public: /*! The \p rebind metafunction provides the type of an \p allocator * instantiated with another type. * * \tparam U The other type to use for instantiation. */ template struct rebind { /*! The typedef \p other gives the type of the rebound \p allocator. */ typedef allocator other; }; /*! No-argument constructor has no effect. */ __host__ __device__ inline allocator() {} /*! Copy constructor has no effect. */ __host__ __device__ inline allocator(const allocator & other) : base(other) {} /*! Constructor from other \p allocator has no effect. */ template __host__ __device__ inline allocator(const allocator & other) : base(other) {} /*! Destructor has no effect. */ __host__ __device__ inline ~allocator() {} }; // end allocator } // end cpp /*! \} */ } // end system /*! \namespace thrust::cpp * \brief \p thrust::cpp is a top-level alias for thrust::system::cpp. */ namespace cpp { using thrust::system::cpp::malloc; using thrust::system::cpp::free; using thrust::system::cpp::allocator; } // end cpp } // end thrust #include