Bootstrap

memset & malloc

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(为指针大小并非实际分配内存大小)。

;