malloc(0)和malloc(-1)

malloc(-1):       windows 上会崩溃             linux上  不会崩溃

malloc(0):      windows       int*p=(int *)malloc(0) ;如果使用了这块内存eg:  *p=1;   再free(p) ;就会崩溃       

                          linux上       malloc申请 <=12字节的内存,都会分配出12字节大小的内存

                                             malloc申请  >12字节的内存,分配的内存会在12d的基础上每次增加8字节;(X-12)%8==0

                                          eg:   malloc申请内存大小              系统分配内存大小

                                                         0                                                    12

                                                        11                                                   12

                                                       12                                                    12

                                                       13                                                    20       

                                                      129                                                  132

另外,windows上求分配内存大小用_msize();Linux上用malloc_usable_size();  而不是sizeof(0或strlen();

_msize()为windows下检测堆上动态分配的内存块的大小

malloc_usable_size为LINUX下进行检测的函数。

猜你喜欢

转载自blog.csdn.net/ymy_mine/article/details/81208174