1.memset()内存设置函数(初始化) void *my_memset(void* dest, int c, size_t count) { assert(dest != NULL); char *pdest = (char *)dest; while (count-->0) { *pdest++ = c; } return dest; } 2.memcmp()内存比较函数 int my_memcmp(const char* str1, const char* str2, size_t co…
memset,memcmp,memcpy,memmove是对内存进行管理的库函数,为了更好的理解和使用这几个函数,自己用C语言实现一下~ //内存设置函数void* my_memset(void* dest, int c, size_t count){ assert(dest != NULL); char* pDest = (char*)dest; while (count-->0) //将内存中count个设置为c { *pDest++ = c; } return dest; } //内存比较…
memset memcmp memcpy memmove 自己实现 memset #include <stdio.h> #include <memory.h> #include <assert.h> void* my_memset(void* dest, int c, size_t cnt){ assert(NULL != dest); char *a = (char*)dest; while(cnt-- > 0){ *a++ = c; } return dest…
通过字符串的学习,我们知道字符串操作函数的操作对象是字符串,并且它的结束标志是结束符\0,当然这个说的是不 受限制的字符串函数.然而当我们想要将一段内存的数据复制到另一块内存时,我们不能使用字符串操作函数,当然也 不能一个一个复制,所以就引入了内存操作函数. memcpy函数原型: void *memcpy(void *dst, const void *src, size_t size);将一块内存的数据复制到另一块内存.当两块内存重叠              的时候,memcpy就不能保证拷…
void的含义 void的字面意思是“无类型”, void * 则为“无类型指针”, void * 可以指向任何类型的数据 void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量.让我们来试着来定义 void a; | error: variable or field 'a' declared void void真正发挥作用在于: () 对函数返回的限定: () 对函数参数的限定: 众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间相互赋值: 如果p1…
原文 c#读写共享内存操作函数封装 c#共享内存操作相对c++共享内存操作来说原理是一样,但是c#会显得有点复杂. 现把昨天封装的读写共享内存封装的函数记录下来,一方面希望给需要这块的有点帮助,另一方面则是做个备份吧. [csharp] view plaincopy /// <summary> /// 写共享内存 /// </summary> /// <param name="structSize">需要映射的文件的字节数量</param>…
请看下面的代码: program TestRecord; {$APPTYPE CONSOLE} uses  SysUtils,  Math; type  TRecordA = record    Name: string;  end; procedure RunTestRecord;var  R1, R2: TRecordA;begin  R1.Name := StringOfChar('A', RandomRange(64, 256) * 1024);  Move(R1, R2, SizeOf…
我的memcmp: int memcmp(void *buf1, void *buf2, unsigned int count){ int reval; while(count && !(reval = (*(unsigned char *)buf1) - (*(unsigned char *)buf2))) { buf1 = (unsigned ; buf2 = (unsigned ; --count; } return reval; } MS VC: int __cdecl memcm…
  一.malloc/calloc 名称: Malloc/calloc 功能: 动态内存分配函数 头文件: #include <stdlib.h> 函数原形: void *malloc(size_t size); void *calloc(size_t num,size_t size); 参数: size    分配内存块的大小 num 分配内存块的个数 返回值: 成功返回分配内存块的首地址,失败返回NULL. malloc和calloc都可以分配内存区,但malloc一次只能申请一个内存区,…
一.malloc/calloc 名称: Malloc/calloc 功能:  动态内存分配函数 头文件: #include <stdlib.h> 函数原形: void *malloc(size_t size);void *calloc(size_t num,size_t size); 参数:  size    分配内存块的大小num 分配内存块的个数 返回值:  成功返回分配内存块的首地址,失败返回NULL. malloc和calloc都可以分配内存区,但malloc一次只能申请一个内存区,c…
<cstring>是c++对c中的<string.h>进行了重写,这两个头文件中的函数用法是一样的,所以在用的时候包含哪个头文件都行.下面介绍一下 <cstring>头文件里常用的两个函数:分别是memset和memcpy. 1. memset(void* buffer,int a,size_t n):将buffer当前所指位置后面的n个字节填充为a,注意memset是按字节对内存块进行填充的,所以只能 填充0或-1.buffer是一个指针或者数组名,a是int型数据,…
void *memset(void *s, int c, unsigned long n); 将指针变量 s 所指向的前 n 字节的内存单元用一个"整数" c 替换,注意 c 是 int 型.s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化.…
一.malloc函数 /* 首先需要导入头文件 #include <stdlib.h> malloc void* malloc(n); n是字节大小 开辟堆空间,开辟的字节数以n为准 返回的是开辟空间的首地址 void*是万能指针,也就是说你可以用任意类型的指针去指向 */ //malloc用法 int *p = malloc(sizeof(int)); *p = ; printf("%p %d\n",p,*p);//0x100105490 ); pc[]= 'a'; pc…
1.  ExAllocatePool() 函数说明: ExAllocatePool allocates pool memory of the specified type and returns a pointer to the allocated block. 函数定义: PVOID ExAllocatePool( __in  POOL_TYPE PoolType, __in  SIZE_T NumberOfBytes ); 代码中用来分配设备描述DMA adepter设备的特性(DEVICE…
马上能想到的函数有: GetMem AllocMem ReallocMem FreeMem GetMemory ReallocMemory FreeMemory New Dispose NewStr DisposeStr StrNew StrAlloc StrDispose GlobalAllocPtr GlobalFreePtr WideStrAlloc AnsiStrAlloc StrDispose Move MoveMemory CopyMemory ZeroMemory FillMemo…
马上能想到的函数有: GetMem AllocMem ReallocMem FreeMem GetMemory ReallocMemory FreeMemory New Dispose NewStr DisposeStr StrNew StrAlloc StrDispose GlobalAllocPtr GlobalFreePtr WideStrAlloc AnsiStrAlloc StrDispose Move MoveMemory CopyMemory ZeroMemory FillMemo…
静态数组, 在声明时就分配好内存了, 譬如: var   arr1: ..] of Char;   arr2: ..] of Integer; begin   ShowMessageFmt('数组大小分别是: %d.%d', [SizeOf(arr1), SizeOf(arr2)]);   {数组大小分别是: 512.1024} end; 对静态数组指针, 虽然在声明之处并没有分配内存, 但这个指针应该分配多少内存是有定数的. 这种情况, 我们应该用 New 和 Dispose 来分配与释放内存…
MoveMemory.CopyMemory 的功能类似, 都是复制内存, 都是调用 Move 过程; MoveMemory.CopyMemory 操作指针; Move 操作实体. 还要注意, 它们的参数位置不一样! {例1} var buf1,buf2: ..] of AnsiChar; begin buf1 := '; buf2 := 'abcdefghij'; Move(buf2[], buf1[], ); ShowMessage(buf1); {0123cdefg9} ShowMessag…
C语言动态分配内存,malloc的出现就是来弥补静态内存分配的缺点 比如说我们在定义数组的时候,数组的长度必须是一个常量,不能改变的值,假如我事先定义了数组,一旦业务需求发生改变,那么这个数组就不能再使用了. 传统的数组定义也就是静态分配,是不能够手动释放的,只能等待系统释放,静态分配的内存,是分配在栈中的,C语言中的函数调用也是通过栈来实现的,栈有一个特点就是先进后出,在调用函数的时候,是先压入栈,然后从最上面的函数开始执行 我们先来看看内存四区,分别为堆区,栈区,数据区,代码区,对于这四个区…
函数原型: void * memset ( void * buffer, int c, size_t num ); 关于void * 因为任何类型的指针都可以传入memset函数,这也真是体现了内存操作函数的意义,因为他操作的对象仅仅是一片内存,而不论这片内存是什么类型! void无类型,其实是一种类型上的抽象,它可以转换成任何类型! void *myMemset(void *s, int ch, size_t n) // point 1: s的类型未知,n代表字节数 { assert(NULL…
sizeof测类型(数组名除外) strlen测实际长度 strncpy返回指针类型 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *p="wangddd"; printf("%d\n",sizeof(p));//输出4,指针类型 ]; printf("%d\n",sizeof(x));//输出8,所占内…
源自最近遇到一个的问题,先介绍一下背景.项目中混用了C与C++编程范式,鉴于项目成员背景不一,每个模块的负责人可以自行2选1.同时为了提高效率,C范式的模块被允许使用STL库的部分容器(其实也就仅仅大量使用了vector而已).开发环境是visual studio 2005 wiht sp1. 那么问题来了,在部分模块中,纯C结构体和包含C++类的结构体共存,但它们的内存布局是不同的,所需要的初始化方式.内存操作函数均不同(malloc.new.memset....). 巧合的是,在vs2005…
strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符'\0'. 已知strcpy函数的原型是:char* strcpy(char* dest, const char* src); memcpy提供了一般内存的复制.即memcpy对于需要复制的内容没有限制,因此用途更广. void *memcpy( void *dest, const void *src, size_t …
Delphi内存操作API函数System.IsMemoryManagerSet;System.Move;System.New;System.ReallocMem;System.ReallocMemory;System.SetMemoryManager;System.SysAllocMem;System.SysFreeMem;System.SysGetMem;System.SysReallocMem; SysUtils.DisposeStr;SysUtils.NewStr; TlHelp32.H…
linux内核中内存相关的操作函数 1.kmalloc()/kfree() static __always_inline void *kmalloc(size_t size, gfp_t flags) 内核空间申请指定大小的内存区域,返回内核空间虚拟地址.在函数实现中,如果申请的内存空间较大的话,会从buddy系统申请若干内存页面,如果申请的内存空间大小较小的话,会从slab系统中申请内存空间.有关buddy和slab,请参见<linux内核之内存管理.doc> gfp_t flags 的选项…
原型:void*memcpy(void*dest, const void*src,unsigned int count); 功能:由src所指内存区域复制count个字节到dest所指内存区域. 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针. 举例: // memcpy.c #include <stdlib.h> #include <string.h> main() { char *s= "Golden Global View "; ]…
memcpy指的是C和C++使用的内存拷贝函数 函数原型为void *memcpy(void *destin, void *source, unsigned n): 函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源source中拷贝n个字节到目标destin中. memcpy函数语法 函数原型  void *memcpy(void *destin, void *source, unsigned n);参数  destin-- 指向用于存储复制内容的目标数组,类型强制转…
一.            字符处理函数 1.        字符处理函数:<ctype.h> int isdigit(int ch) ;//是否为数字,即ch是否是0-9中的字符 int isxdigit(int ch) ;//是否为十六进制数字,即ch是否是0-9 a-z A-Z 中的字符 int isalpha(int ch) ;//是否为字母 int isalnum(int ch) ;//是否为字母或数字 int islower(int ch) ;//是否为小写字母 int isupp…
函数介绍 memccpy(拷贝内存内容) 相关函数 bcopy,memcpy,memmove,strcpy,strncpy 表头文件 #include<string.h> 定义函数 void * memccpy(void *dest, const void * src, int c,size_t n); 函数说明 memccpy()用来拷贝src所指的内存内容前n个字节到dest所指的地址上.与memcpy()不同的是,memccpy()会在复制时检查参数c是否出现,若是则返回dest中值为c…
//使用字符串操作应时刻注意字符串或者数组长度!!避免溢出!! 1. size_t strlen(char const *str); //计算字符串长度, 注意返回size_t类型的值, 即unsigned int类型, 所以strlen(str1) - strlen(str2) >= 0永远是正确的(两个unsigned int相操作不会进行强制类型转换)! |double <- float |long |unsigned int |int <- short, char 2. char…