Changeset d46ed6e for src/libcfa/stdlib


Ignore:
Timestamp:
Jul 25, 2018, 6:20:35 PM (7 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer, pthread-emulation, qualifiedEnum
Children:
cf0de0e
Parents:
891790ef
Message:

first attempt for new thread-safe heap

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/stdlib

    r891790ef rd46ed6e  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul 12 08:03:58 2018
    13 // Update Count     : 337
     12// Last Modified On : Mon Jul 23 07:44:47 2018
     13// Update Count     : 341
    1414//
    1515
    1616#pragma once
    1717
    18 #include <stdlib.h>                                                                             // allocation, strto*, ato*
     18#include <stdlib.h>                                                                             // *alloc, strto*, ato*
    1919extern "C" {
    2020        void * memalign( size_t align, size_t size );           // malloc.h
    2121        void * memset( void * dest, int c, size_t size );       // string.h
    2222        void * memcpy( void * dest, const void * src, size_t size ); // string.h
     23    void * cmemalign( size_t alignment, size_t noOfElems, size_t elemSize ); // CFA
    2324} // extern "C"
    2425
     
    3637
    3738        T * malloc( void ) {
    38                 // printf( "* malloc\n" );
    3939                return (T *)(void *)malloc( (size_t)sizeof(T) ); // C malloc
    4040        } // malloc
     
    4848
    4949        T * calloc( size_t dim ) {
    50                 //printf( "X2\n" );
    5150                return (T *)(void *)calloc( dim, sizeof(T) );   // C calloc
    5251        } // calloc
    5352
    5453        T * realloc( T * ptr, size_t size ) {
    55                 //printf( "X3\n" );
    5654                return (T *)(void *)realloc( (void *)ptr, size );
    5755        } // realloc
    5856
    5957        T * memalign( size_t align ) {
    60                 //printf( "X4\n" );
    6158                return (T *)memalign( align, sizeof(T) );
    6259        } // memalign
    6360
    6461        T * aligned_alloc( size_t align ) {
    65                 //printf( "X5\n" );
    6662                return (T *)aligned_alloc( align, sizeof(T) );
    6763        } // aligned_alloc
    6864
    6965        int posix_memalign( T ** ptr, size_t align ) {
    70                 //printf( "X6\n" );
    7166                return posix_memalign( (void **)ptr, align, sizeof(T) ); // C posix_memalign
    7267        } // posix_memalign
     
    7671
    7772        T * alloc( void ) {
    78                 //printf( "X7\n" );
    7973                return (T *)(void *)malloc( (size_t)sizeof(T) ); // C malloc
    8074        } // alloc
    8175
    8276        T * alloc( char fill ) {
    83                 //printf( "X8\n" );
    8477                T * ptr = (T *)(void *)malloc( (size_t)sizeof(T) );     // C malloc
    8578                return (T *)memset( ptr, (int)fill, sizeof(T) );        // initial with fill value
     
    8780
    8881        T * alloc( size_t dim ) {
    89                 //printf( "X9\n" );
    9082                return (T *)(void *)malloc( dim * (size_t)sizeof(T) ); // C malloc
    9183        } // alloc
    9284
    9385        T * alloc( size_t dim, char fill ) {
    94                 //printf( "X10\n" );
    9586                T * ptr = (T *)(void *)malloc( dim * (size_t)sizeof(T) ); // C malloc
    9687                return (T *)memset( ptr, (int)fill, dim * sizeof(T) );    // initial with fill value
     
    9889
    9990        T * alloc( T ptr[], size_t dim ) {
    100                 //printf( "X11\n" );
    10191                return (T *)(void *)realloc( (void *)ptr, dim * (size_t)sizeof(T) ); // C realloc
    10292        } // alloc
     
    10999static inline forall( dtype T | sized(T) ) {
    110100        T * align_alloc( size_t align ) {
    111                 //printf( "X13\n" );
    112101                return (T *)memalign( align, sizeof(T) );
    113102        } // align_alloc
    114103
    115104        T * align_alloc( size_t align, char fill ) {
    116                 //printf( "X14\n" );
    117105                T * ptr = (T *)memalign( align, sizeof(T) );
    118106                return (T *)memset( ptr, (int)fill, sizeof(T) );
     
    120108
    121109        T * align_alloc( size_t align, size_t dim ) {
    122                 //printf( "X15\n" );
    123110                return (T *)memalign( align, dim * sizeof(T) );
    124111        } // align_alloc
    125112
    126113        T * align_alloc( size_t align, size_t dim, char fill ) {
    127                 //printf( "X16\n" );
    128                 T * ptr = (T *)memalign( align, dim * sizeof(T) );
    129                 return (T *)memset( ptr, (int)fill, dim * sizeof(T) );
     114                T * ptr;
     115                if ( fill == '\0' ) {
     116                        ptr = (T *)cmemalign( align, dim, sizeof(T) );
     117                } else {
     118                        ptr = (T *)memalign( align, dim * sizeof(T) );
     119                        return (T *)memset( ptr, (int)fill, dim * sizeof(T) );
     120                } // if
     121                return ptr;
    130122        } // align_alloc
    131123} // distribution
     
    136128
    137129        T * memset( T * dest, char c ) {
    138                 //printf( "X17\n" );
    139130                return (T *)memset( dest, c, sizeof(T) );
    140131        } // memset
    141132
    142133        T * memcpy( T * dest, const T * src ) {
    143                 //printf( "X18\n" );
    144134                return (T *)memcpy( dest, src, sizeof(T) );
    145135        } // memcpy
     
    150140
    151141        T * memset( T dest[], size_t dim, char c ) {
    152                 //printf( "X19\n" );
    153142                return (T *)(void *)memset( dest, c, dim * sizeof(T) ); // C memset
    154143        } // memset
    155144
    156145        T * memcpy( T dest[], const T src[], size_t dim ) {
    157                 //printf( "X20\n" );
    158146                return (T *)(void *)memcpy( dest, src, dim * sizeof(T) ); // C memcpy
    159147        } // memcpy
Note: See TracChangeset for help on using the changeset viewer.