memset & malloc 的使用
1. void * memset(void *s, int ch, size_t n)
定义了数组WORD data[64].
先开始想用memset初始化数组: memset(data, 1746, sizeof(WORD)*64); hex(1746)=06 D2;初始化后打开数据文件发现如图结果:
于是查了memset的描述,发现memset 是字节为单位来初始化内存,而WORD占用两个字节,因此memset 只将高位的D2进行了操作因此结果如图,最后还是使用了循环赋值,得到了正确结果
2. void * malloc(unsigned int num_bytes)
malloc 可用于动态分配内存, 内存使用结束后必须使用free()进行释放,否则会引起内存泄露。
一般进程运行的内存资源在“栈”中,这部分资源在进程结束后会自行释放回收。而malloc分配的内存为系统 “堆”区的空闲内存,该部分内存必须手动释放,其占用资源并不属于该进程,因此不会自行释放。
char str[20]; 与
char * str; str = (char *)malloc(20* sizeof(char)); free(str);
的区别在于, 前者所需要的内存资源在程序编译时已经申请,并算在了该进程的栈区所占资源内其大小已知。而后者所需要的内存资源是在进程开始后动态分配的,其大小在编译时是未知的。
因此对于两条语句分别调用sizeof(str) 前者得到 20, 后者得到4(为指针大小并非实际分配内存大小)。