Why do we have __valarray_get_memory?

Jonathan Wakely jwakely@redhat.com
Fri Jan 26 12:48:00 GMT 2018


On 15/01/18 00:09 -0800, Gabriel Dos Reis wrote:
>[ sorry for the slow mail ]

And same here :-)

>On Tue, Dec 5, 2017 at 8:18 AM, Jonathan Wakely <jwakely@redhat.com> wrote:
>
>> Does the first function here really serve any purpose?
>>
>>  // We get memory by the old fashion way
>>  inline void*
>>  __valarray_get_memory(size_t __n)
>>  { return operator new(__n); }
>>
>>  template<typename _Tp>
>>    inline _Tp*__restrict__
>>    __valarray_get_storage(size_t __n)
>>    {
>>      return static_cast<_Tp*__restrict__>
>>         (std::__valarray_get_memory(__n * sizeof(_Tp)));
>>    }
>>
>>  // Return memory to the system
>>  inline void
>>  __valarray_release_memory(void* __p)
>>  { operator delete(__p); }
>>
>> Is there any benefit to doing that, instead of just making a direct
>> call to operator new?
>>
>
>None, now.  I don't remember the exact reasons why I introduced that
>intermediate function - in the old days, one needed to be "tactical" with
>__restrict__.
>Please, feel free to fold it into its sole caller and burn it.

OK thanks.


>>
>>  template<typename _Tp>
>>    inline _Tp*
>>    __valarray_get_storage(size_t __n)
>>    { return static_cast<_Tp*>(operator new(__n * sizeof(_Tp))); }
>>
>> As I said in another thread, I don't think the __restrict__ does
>> anything there, but maybe it should use __attribute__((malloc))
>> instead.
>>
>
>Sorry, was I copied on the other thread?

No, sorry, that was this mail, about fixing warnings in our headers:
https://gcc.gnu.org/ml/libstdc++/2017-12/msg00015.html

>In any case, __attribute__((malloc)) is probably the right thing.

Thanks for the confirmation.




More information about the Libstdc++ mailing list