📄 imalloc.h
字号:
/* imalloc.h -- internal malloc definitions shared by source files. *//* Copyright (C) 2001-2003 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Bash is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Bash. If not, see <http://www.gnu.org/licenses/>.*//* Must be included *after* config.h */#ifndef _IMALLOC_H#define _IMALLOC_H#ifdef MALLOC_DEBUG#define MALLOC_STATS#define MALLOC_TRACE#define MALLOC_REGISTER#define MALLOC_WATCH#endif#define MALLOC_WRAPFUNCS/* Generic pointer type. */#ifndef PTR_T# if defined (__STDC__)# define PTR_T void *# else# define PTR_T char *# endif#endif#if !defined (NULL)# define NULL 0#endif#if !defined (__STRING)# if defined (HAVE_STRINGIZE)# define __STRING(x) #x# else# define __STRING(x) "x"# endif /* !HAVE_STRINGIZE */#endif /* !__STRING */#if __GNUC__ > 1# define FASTCOPY(s, d, n) __builtin_memcpy (d, s, n)#else /* !__GNUC__ */# if !defined (HAVE_BCOPY)# if !defined (HAVE_MEMMOVE)# define FASTCOPY(s, d, n) memcpy (d, s, n)# else# define FASTCOPY(s, d, n) memmove (d, s, n)# endif /* !HAVE_MEMMOVE */# else /* HAVE_BCOPY */# define FASTCOPY(s, d, n) bcopy (s, d, n)# endif /* HAVE_BCOPY */#endif /* !__GNUC__ */#if !defined (__P)# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) || defined (PROTOTYPES)# define __P(protos) protos# else # define __P(protos) ()# endif#endif/* Use Duff's device for good zeroing/copying performance. DO NOT call the Duff's device macros with NBYTES == 0. */#define MALLOC_BZERO(charp, nbytes) \do { \ if ((nbytes) <= 32) { \ size_t * mzp = (size_t *)(charp); \ unsigned long mctmp = (nbytes)/sizeof(size_t); \ long mcn; \ if (mctmp < 8) mcn = 0; else { mcn = (mctmp-1)/8; mctmp &= 7; } \ switch (mctmp) { \ case 0: for(;;) { *mzp++ = 0; \ case 7: *mzp++ = 0; \ case 6: *mzp++ = 0; \ case 5: *mzp++ = 0; \ case 4: *mzp++ = 0; \ case 3: *mzp++ = 0; \ case 2: *mzp++ = 0; \ case 1: *mzp++ = 0; if(mcn <= 0) break; mcn--; } \ } \ else \ memset ((charp), 0, (nbytes)); \} while(0)#define MALLOC_ZERO(charp, nbytes) \do { \ size_t mzsz = (nbytes); \ if (mzsz <= 9 * sizeof(mzsz) { \ size_t *mz = (size_t *)(charp); \ if(mzsz >= 5*sizeof(mzsz)) { *mz++ = 0; \ *mz++ = 0; \ if(mzsz >= 7*sizeof(mzsz)) { *mz++ = 0; \ *mz++ = 0; \ if(mzsz >= 9*sizeof(mzsz)) { *mz++ = 0; \ *mz++ = 0; }}} \ *mz++ = 0; \ *mz++ = 0; \ *mz = 0; \ } else \ memset ((charp), 0, mzsz); \} while (0)#define MALLOC_MEMSET(charp, xch, nbytes) \do { \ if ((nbytes) <= 32) { \ register char * mzp = (charp); \ unsigned long mctmp = (nbytes); \ register long mcn; \ if (mctmp < 8) mcn = 0; else { mcn = (mctmp-1)/8; mctmp &= 7; } \ switch (mctmp) { \ case 0: for(;;) { *mzp++ = xch; \ case 7: *mzp++ = xch; \ case 6: *mzp++ = xch; \ case 5: *mzp++ = xch; \ case 4: *mzp++ = xch; \ case 3: *mzp++ = xch; \ case 2: *mzp++ = xch; \ case 1: *mzp++ = xch; if(mcn <= 0) break; mcn--; } \ } \ } else \ memset ((charp), (xch), (nbytes)); \} while(0)#define MALLOC_MEMCPY(dest,src,nbytes) \do { \ if ((nbytes) <= 32) { \ size_t* mcsrc = (size_t*) src; \ size_t* mcdst = (size_t*) dest; \ unsigned long mctmp = (nbytes)/sizeof(size_t); \ long mcn; \ if (mctmp < 8) mcn = 0; else { mcn = (mctmp-1)/8; mctmp &= 7; } \ switch (mctmp) { \ case 0: for(;;) { *mcdst++ = *mcsrc++; \ case 7: *mcdst++ = *mcsrc++; \ case 6: *mcdst++ = *mcsrc++; \ case 5: *mcdst++ = *mcsrc++; \ case 4: *mcdst++ = *mcsrc++; \ case 3: *mcdst++ = *mcsrc++; \ case 2: *mcdst++ = *mcsrc++; \ case 1: *mcdst++ = *mcsrc++; if(mcn <= 0) break; mcn--; } \ } else \ memcpy ((dest), (src), (nbytes)) \} while(0)#if defined (SHELL)# include "bashintl.h"#else# define _(x) x#endif#endif /* _IMALLOC_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -