- Timestamp:
- Jun 1, 2017, 10:58:18 PM (7 years ago)
- 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, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 49c9773
- Parents:
- 6016c87
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/user/user.tex
r6016c87 r6065b3aa 11 11 %% Created On : Wed Apr 6 14:53:29 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : T ue May 30 11:45:46201714 %% Update Count : 2 09813 %% Last Modified On : Thu Jun 1 22:46:09 2017 14 %% Update Count : 2126 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 5242 5242 \begin{description} 5243 5243 \item[fill] 5244 after allocation the storage is or is notfilled with a specified character.5244 after allocation the storage is filled with a specified character. 5245 5245 \item[resize] 5246 5246 an existing allocation is decreased or increased in size. 5247 5247 In 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 or may notbe filled.5248 For an increase in storage size, new storage after the copied data may be filled. 5249 5249 \item[alignment] 5250 5250 an allocation starts on a specified memory boundary, e.g., an address multiple of 64 or 128 for cache-line purposes. 5251 5251 \item[array] 5252 5252 the allocation size is scaled to the specified number of array elements. 5253 An array may or notbe filled, resized, or aligned.5253 An array may be filled, resized, or aligned. 5254 5254 \end{description} 5255 5256 The following table show the allocation routines supporting different combinations of storage-management capabilities: 5255 The table shows allocation routines supporting different combinations of storage-management capabilities: 5257 5256 \begin{center} 5258 \begin{tabular}{@{} r|l|l|l|l@{}}5259 & fill& resize & alignment & array \\5257 \begin{tabular}{@{}lr|l|l|l|l@{}} 5258 & & \multicolumn{1}{c|}{fill} & resize & alignment & array \\ 5260 5259 \hline 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\\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 \\ 5269 5268 \end{tabular} 5270 5269 \end{center} 5271 % When ©amalloc© resizes and fills, the space after the copied data from the source is set to the fill character.5272 5270 It 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. 5273 5271 5274 5272 \leavevmode 5275 5273 \begin{cfa}[aboveskip=0pt,belowskip=0pt] 5276 // allocation, non-array types 5277 forall( dtype T | sized(T) ) T * malloc( void );§\indexc{malloc}§ 5278 forall( dtype T | sized(T) ) T * malloc( char fill ); 5279 5280 // allocation, array types 5281 forall( dtype T | sized(T) ) T * calloc( size_t dim );§\indexc{cmalloc}§ 5282 forall( dtype T | sized(T) ) T * amalloc( size_t dim );§\indexc{amalloc}§ // alternate name for calloc 5283 forall( dtype T | sized(T) ) T * amalloc( size_t dim, char fill ); 5284 5285 // resize, non-array types 5286 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size );§\indexc{realloc}§ 5287 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size, char fill ); 5288 forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size ); // alternate name for realloc 5289 forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size, char fill ); 5290 5291 // resize, array types 5292 forall( dtype T | sized(T) ) T * amalloc( T * ptr, size_t dim ); 5293 forall( dtype T | sized(T) ) T * amalloc( T * ptr, size_t dim, char fill ); 5294 5295 // alignment, non-array types 5296 forall( dtype T | sized(T) ) T * memalign( size_t alignment );§\indexc{memalign}§ 5297 forall( dtype T | sized(T) ) T * memalign( size_t alignment, char fill ); 5298 forall( dtype T | sized(T) ) T * aligned_alloc( size_t alignment );§\indexc{aligned_alloc}§ 5299 forall( dtype T | sized(T) ) int posix_memalign( T ** ptr, size_t alignment );§\indexc{posix_memalign}§ 5300 5301 // alignment, array types 5302 forall( dtype T | sized(T) ) T * amemalign( size_t alignment, size_t dim );§\indexc{amemalign}§ 5303 forall( dtype T | sized(T) ) T * amemalign( size_t alignment, size_t dim, char fill ); 5304 5305 // data, non-array types 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 5306 5308 forall( dtype T | sized(T) ) T * memset( T * dest, char c );§\indexc{memset}§ 5307 5309 forall( dtype T | sized(T) ) T * memcpy( T * dest, const T * src );§\indexc{memcpy}§ 5308 5310 5309 // data, array types5310 forall( dtype T | sized(T) ) T * amemset( T * dest, size_t dim, char c );§\indexc{amemset}§5311 forall( dtype T | sized(T) ) T * amemcpy( T * dest, const T * src, size_t dim );§\indexc{amemcpy}§5312 5313 // allocation/deallocation and constructor/destructor5314 forall( dtype T , ttype Params | sized(T) | { void ?{}(T *, Params); } ) T * new( Params p );§\indexc{new}§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}§ 5315 5317 forall( dtype T | { void ^?{}( T * ); } ) void delete( T * ptr );§\indexc{delete}§ 5316 forall( dtype T, ttype Params | { void ^?{}( T * ); void delete(Params); } ) void delete( T * ptr, Params rest ); 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 ); 5317 5326 \end{cfa} 5318 5327
Note: See TracChangeset
for help on using the changeset viewer.