生活随笔
收集整理的这篇文章主要介绍了
malloc 源码
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
两个函数取自UNIX 版本6 malloc.c文件,一个为malloc函数,一个为mfree函数 2515: struct map 2516: { 2517: char *m_size; 2518: char *m_addr; 2519: }; 2520: 2521: 2522: 2528: malloc(mp, size) 2529: struct map *mp; 2530: { 2531: register int a; 2532: register struct map *bp; 2533: 2534: for (bp = mp; bp->m_size; bp++) { 2535: if (bp->m_size >= size) { 2536: a = bp->m_addr; 2537: bp->m_addr =+ size; 2538: if ((bp->m_size =- size) == 0) 2539: do { 2540: bp++; 2541: (bp-1)->m_addr = bp->m_addr; 2542: } while ((bp-1)->m_size = bp->m_size); 2543: return(a); 2544: } 2545: } 2546: return(0); 2547: } 2548: 2549: 2550: 2556: mfree(mp, size, aa) 2557: struct map *mp; 2558: { 2559: register struct map *bp; 2560: register int t; 2561: register int a; 2562: 2563: a = aa; 2564: for (bp = mp; bp->m_addr<=a && bp->m_size!=0; bp++); 2565: if (bp>mp && (bp-1)->m_addr+(bp-1)->m_size == a) { 2566: (bp-1)->m_size =+ size; 2567: if (a+size == bp->m_addr) { 2568: (bp-1)->m_size =+ bp->m_size; 2569: while (bp->m_size) { 2570: bp++; 2571: (bp-1)->m_addr = bp->m_addr; 2572: (bp-1)->m_size = bp->m_size; 2573: } 2574: } 2575: } else { 2576: if (a+size == bp->m_addr && bp->m_size) { 2577: bp->m_addr =- size; 2578: bp->m_size =+ size; 2579: } else if (size) do { 2580: t = bp->m_addr; 2581: bp->m_addr = a; 2582: a = t; 2583: t = bp->m_size; 2584: bp->m_size = size; 2585: bp++; 2586: } while (size = t); 2587: } 2588: } 2589:
总结
以上是生活随笔为你收集整理的malloc 源码的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。