我爱编程

linux系统编程-内存管理day04-选择合适的内存分配机制&

2018-05-28  本文已影响0人  桔子满地

选择一个合适的内存分配机制

静态分配 和 自动分配

有两类是不需要程序员去控制内存分配的:

需要程序员控制分配和释放的内存分配方法
  1. malloc( )

  1. calloc( )

  1. realloc( )

  1. brk( ) 和 sbrk( )

  1. 匿名内存映射

  1. posix_memalign( )

  1. memalign( ) 和 valloc( )

  1. alloca( )

  1. 变长数组VLAs

存储器操作

C语言提供了很多函数进行内存操作。这些函数的功能和字符串操作函数(如strcmp( ) 以及 strcpy( ))类似,但是他们处理的对象是用户提供的内存区域而不是以NULL结尾的字符串。

  1. 字节设置 memset( ):
#include <string.h>
void *memset(void *s, int c, size_t n);
/* zero out [s, s+256) */
memset(s, '\0', 256);

2.字节比较 memcmp( ):

#include <string.h>
int memcmp(const void *s1, const void *s2, size_t n);

和strcmp( )相似,memcmp( )比较两块内存是否相等。

  1. 字节移动
    3.1 memmove( ):
#include <string.h>
void *memmove(void *dst, void *src, size_t n);

memmove( )复制src的前n字节到dst,返回dst。

3.1 不支持内存区域覆盖的memcpy( ):

#include <string.h>
void *memcpy(void *dst, const void *src, size_t n);

3.2 memccpy( ):

#include <string.h>
void *memccpy(void *dst, const void *src, int c, size_t n);

memccpy( )和memcpy( )类似,但当它发现字节c在src指向的前n个字节中时会停止拷贝。它返回指向dst中c后一个字节的指针,或者当没有找到c时返回NULL。

3.3 mempcpy( ):

#define _GNU_SOURCE
#include <string.h>
void *mempcpy(void *dst, const void *src, size_t n);
  1. 字节搜索
    4.1 memchr( ):
#include <string.h>
void *memchr(const void *s, int c, size_t n);

4.2 memrchr( ):

#define _GNU_SOURCE
#include <string.h>
void *memrchr(const void *s, int c, size_t n);

4.3 memmem( ):

#define _GNU_SOURCE
#include <string.h>
void *memmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen);
  1. 字节加密
    Linux的C库提供了进行简单数据加密的接口:
#define _GNU_SOURCE
#include <string.h>
void *memfrob(void *s, size_t n);
上一篇 下一篇

猜你喜欢

热点阅读