Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/user/user.tex

    r6065b3aa r55f5c59  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Thu Jun  1 22:46:09 2017
    14 %% Update Count     : 2126
     13%% Last Modified On : Tue May 30 11:42:47 2017
     14%% Update Count     : 2097
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    51645164\Celeven prescribes the following standard header-files~\cite[\S~7.1.2]{C11} and \CFA adds to this list:
    51655165\begin{quote2}
    5166 \lstset{deletekeywords={float}}
     5166\lstset{deletekeywords={float},deletekeywords=[2]{signal}}
    51675167\begin{tabular}{@{}llll|l@{}}
    51685168\multicolumn{4}{c|}{C11} & \multicolumn{1}{c}{\CFA}             \\
     
    52425242\begin{description}
    52435243\item[fill]
    5244 after allocation the storage is filled with a specified character.
     5244after allocation the storage is or is not filled with a specified character.
    52455245\item[resize]
    52465246an existing allocation is decreased or increased in size.
    52475247In either case, new storage may or may not be allocated and, if there is a new allocation, as much data from the existing allocation is copied.
    5248 For an increase in storage size, new storage after the copied data may be filled.
     5248For an increase in storage size, new storage after the copied data may or may not be filled.
    52495249\item[alignment]
    52505250an allocation starts on a specified memory boundary, e.g., an address multiple of 64 or 128 for cache-line purposes.
    52515251\item[array]
    52525252the allocation size is scaled to the specified number of array elements.
    5253 An array may be filled, resized, or aligned.
     5253An array may or not be filled, resized, or aligned.
    52545254\end{description}
    5255 The table shows allocation routines supporting different combinations of storage-management capabilities:
     5255
     5256The following table show the allocation routines supporting different combinations of storage-management capabilities:
    52565257\begin{center}
    5257 \begin{tabular}{@{}lr|l|l|l|l@{}}
    5258                 &                                       & \multicolumn{1}{c|}{fill}     & resize        & alignment     & array \\
     5258\begin{tabular}{@{}r|l|l|l|l@{}}
     5259                                        & fill                          & resize        & alignment     & array \\
    52595260\hline
    5260 C               & ©malloc©                      & no                    & no            & no            & no    \\
    5261                 & ©calloc©                      & yes (0 only)  & no            & no            & yes   \\
    5262                 & ©realloc©                     & no/copy               & yes           & no            & no    \\
    5263                 & ©memalign©            & no                    & no            & yes           & no    \\
    5264                 & ©posix_memalign©      & no                    & no            & yes           & no    \\
    5265 C11             & ©aligned_alloc©       & no                    & no            & yes           & no    \\
    5266 \CFA    & ©alloc©                       & no/copy/yes   & no/yes        & no            & yes   \\
    5267                 & ©align_alloc©         & no/yes                & no            & yes           & yes   \\
     5261©malloc©                        & no/yes                        & no/yes        & no            & no    \\
     5262©amalloc©                       & no/copy data/yes      & no/yes        & no            & yes   \\
     5263©calloc©                        & yes (0 only)          & no            & no            & yes   \\
     5264©realloc©                       & no/copy data          & yes           & no            & no    \\
     5265©memalign©                      & no/yes                        & no            & yes           & no    \\
     5266©amemalign©                     & no/yes                        & no            & yes           & yes   \\
     5267©align_alloc©           & no                            & no            & yes           & no    \\
     5268©posix_memalign©        & no                            & no            & yes           & no    \\
    52685269\end{tabular}
    52695270\end{center}
     5271% When ©amalloc© resizes and fills, the space after the copied data from the source is set to the fill character.
    52705272It is impossible to resize with alignment because the underlying ©realloc© allocates storage if more space is needed, and it does not honour alignment from the original allocation.
    52715273
    52725274\leavevmode
    52735275\begin{cfa}[aboveskip=0pt,belowskip=0pt]
    5274 // C unsafe allocation
    5275 extern "C" { void * mallac( size_t size ); }§\indexc{memset}§
    5276 extern "C" { void * calloc( size_t dim, size_t size ); }§\indexc{calloc}§
    5277 extern "C" { void * realloc( void * ptr, size_t size ); }§\indexc{realloc}§
    5278 extern "C" { void * memalign( size_t align, size_t size ); }§\indexc{memalign}§
    5279 extern "C" { int posix_memalign( void ** ptr, size_t align, size_t size ); }§\indexc{posix_memalign}§
    5280 
    5281 // §\CFA§ safe equivalents, i.e., implicit size specification
    5282 forall( dtype T | sized(T) ) T * malloc( void );
    5283 forall( dtype T | sized(T) ) T * calloc( size_t dim );
    5284 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size );
    5285 forall( dtype T | sized(T) ) T * memalign( size_t align );
    5286 forall( dtype T | sized(T) ) T * aligned_alloc( size_t align );
    5287 forall( dtype T | sized(T) ) int posix_memalign( T ** ptr, size_t align );
    5288 
    5289 // §\CFA§ safe general allocation, fill, resize, array
    5290 forall( dtype T | sized(T) ) T * alloc( void );§\indexc{alloc}§
    5291 forall( dtype T | sized(T) ) T * alloc( char fill );
    5292 forall( dtype T | sized(T) ) T * alloc( size_t dim );
    5293 forall( dtype T | sized(T) ) T * alloc( size_t dim, char fill );
    5294 forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim );
    5295 forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim, char fill );
    5296 
    5297 // §\CFA§ safe general allocation, align, fill, array
    5298 forall( dtype T | sized(T) ) T * align_alloc( size_t align );
    5299 forall( dtype T | sized(T) ) T * align_alloc( size_t align, char fill );
    5300 forall( dtype T | sized(T) ) T * align_alloc( size_t align, size_t dim );
    5301 forall( dtype T | sized(T) ) T * align_alloc( size_t align, size_t dim, char fill );
    5302 
    5303 // C unsafe initialization/copy
    5304 extern "C" { void * memset( void * dest, int c, size_t size ); }
    5305 extern "C" { void * memcpy( void * dest, const void * src, size_t size ); }
    5306 
    5307 // §\CFA§ safe initialization/copy
     5276// allocation, non-array types
     5277forall( dtype T | sized(T) ) T * malloc( void );§\indexc{malloc}§
     5278forall( dtype T | sized(T) ) T * malloc( char fill );
     5279
     5280// allocation, array types
     5281forall( dtype T | sized(T) ) T * calloc( size_t dim );§\indexc{cmalloc}§
     5282forall( dtype T | sized(T) ) T * amalloc( size_t dim );§\indexc{amalloc}§  // alternate name for calloc
     5283forall( dtype T | sized(T) ) T * amalloc( size_t dim, char fill );
     5284
     5285// resize, non-array types
     5286forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size );§\indexc{realloc}§
     5287forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size, char fill );
     5288forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size );  // alternate name for realloc
     5289forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size, char fill );
     5290
     5291// resize, array types
     5292forall( dtype T | sized(T) ) T * amalloc( T * ptr, size_t dim );
     5293forall( dtype T | sized(T) ) T * amalloc( T * ptr, size_t dim, char fill );
     5294
     5295// alignment, non-array types
     5296forall( dtype T | sized(T) ) T * memalign( size_t alignment );§\indexc{memalign}§
     5297forall( dtype T | sized(T) ) T * memalign( size_t alignment, char fill );
     5298forall( dtype T | sized(T) ) T * aligned_alloc( size_t alignment );§\indexc{aligned_alloc}§
     5299forall( dtype T | sized(T) ) int posix_memalign( T ** ptr, size_t alignment );§\indexc{posix_memalign}§
     5300
     5301// alignment, array types
     5302forall( dtype T | sized(T) ) T * amemalign( size_t alignment, size_t dim );§\indexc{amemalign}§
     5303forall( dtype T | sized(T) ) T * amemalign( size_t alignment, size_t dim, char fill );
     5304
     5305// data, non-array types
    53085306forall( dtype T | sized(T) ) T * memset( T * dest, char c );§\indexc{memset}§
    53095307forall( dtype T | sized(T) ) T * memcpy( T * dest, const T * src );§\indexc{memcpy}§
    53105308
    5311 // §\CFA§ safe initialization/copy array
    5312 forall( dtype T | sized(T) ) T * memset( T dest[], size_t dim, char c );
    5313 forall( dtype T | sized(T) ) T * memcpy( T dest[], const T src[], size_t dim );
    5314 
    5315 // §\CFA§ allocation/deallocation and constructor/destructor
    5316 forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } ) T * new( Params p );§\indexc{new}§
     5309// data, array types
     5310forall( dtype T | sized(T) ) T * amemset( T * dest, size_t dim, char c );§\indexc{amemset}§
     5311forall( dtype T | sized(T) ) T * amemcpy( T * dest, const T * src, size_t dim );§\indexc{amemcpy}§
     5312
     5313// allocation/deallocation and constructor/destructor
     5314forall( dtype T, ttype Params | sized(T) | { void ?{}(T *, Params); } ) T * new( Params p );§\indexc{new}§
    53175315forall( dtype T | { void ^?{}( T * ); } ) void delete( T * ptr );§\indexc{delete}§
    5318 forall( dtype T, ttype Params | { void ^?{}( T * ); void delete( Params ); } )
    5319   void delete( T * ptr, Params rest );
    5320 
    5321 // §\CFA§ allocation/deallocation and constructor/destructor, array
    5322 forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } ) T * anew( size_t dim, Params p );§\indexc{anew}§
    5323 forall( dtype T | sized(T) | { void ^?{}( T * ); } ) void adelete( size_t dim, T arr[] );§\indexc{adelete}§
    5324 forall( dtype T | sized(T) | { void ^?{}( T * ); }, ttype Params | { void adelete( Params ); } )
    5325   void adelete( size_t dim, T arr[], Params rest );
     5316forall( dtype T, ttype Params | { void ^?{}( T * ); void delete(Params); } ) void delete( T * ptr, Params rest );
    53265317\end{cfa}
    53275318
Note: See TracChangeset for help on using the changeset viewer.