| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1185 人关注过本帖
标题:动态内存分配问题
只看楼主 加入收藏
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:0 
hehe

[ 本帖最后由 silent_world 于 2012-1-18 13:56 编辑 ]
2012-01-16 16:07
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
程序代码:
/*DEBUG*/
#include <stdio.h>
#include <stdlib.h>

typedef int machine_size;

struct win_heap_chunk {
    struct win_heap_chunk* prev;        //+0x0
    struct win_heap_chunk* next;        //+0x4
    machine_size undef;                 //+0x8
    machine_size undef1;                //+0xC
    machine_size heap_length;           //+0x10
    machine_size undef2;                //+0x14
    machine_size undef3;                //+0x18
    machine_size undef4;                //+0x1C
    void *memblock;                     //+0x20
};

#define DumpCascadePtr(addr, depth)                           \
    do {                                                      \
        machine_size va = addr;                               \
        machine_size vn = depth;                              \
        while (vn-- > 0) {                                    \
            printf("0x%X -> 0x%X\n", va, *(machine_size*)va); \
            va = *(machine_size*)va;                          \
        }                                                     \
    } while (0)

void DumpWinHeapChunk(int *addr)
{
    int i;
#define CHUNK_SIZE (sizeof(struct win_heap_chunk) / sizeof(machine_size))
    for (i = 1; i < CHUNK_SIZE; i++) {
        printf("chunk:0x%0X\n", *(addr - i));
    }
}

void f(int ** q)
{
    *q = (int *)malloc(1);
    DumpCascadePtr((int)&q, 3);
    DumpWinHeapChunk(*q);
    *q = (int *)malloc(5);
    DumpCascadePtr((int)&q, 3);
    DumpWinHeapChunk(*q);
    *(char*)(*q+1) = '5';/*breakpoint here*/
}

int main(int argc, char *argv[])
{
    int * p;
    f(&p);
    printf("%c\n", *(p+1));
    free(p);
    return 0;
}
这个是我以前调试代码随便想的分析,一个heap_chunk有这么多字节,当然inuse位什么的没分析,只是个大概

技术问题,请不要以短消息方式提问
2012-01-16 21:53
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:0 
一个heap_chunk有多少字节都没有关系,只有几个重要点要表达出来就行了。
前一个指针,后一个指针,长度,及当前状态。
其他的项作用在于:
1、是围绕分配、回收策略展开;
2、围绕优先策略,如:操作速度;
3、外部条件;大内存和小内存。
切莫拘泥于已有数据结构,算法存乎一心。切忌,切记。
2012-01-18 13:35
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
一个heap_chunk有多少字节都没有关系>>这个我同意
前一个指针,后一个指针,长度,及当前状态>>这个不一定,gcc的struct可以位置无关
1、是围绕分配、回收策略展开;>>这个要讨论,最好具体讲
2、围绕优先策略,如:操作速度;>>具体讲,比如分片32,64,128 byte slice
3、外部条件;大内存和小内存。>>这个我不太明白,你是指碎片?
切莫拘泥于已有数据结构,算法存乎一心。切忌,切记。 >>我有给你这样的感觉?我只是dump了一下,没说就是这样

技术问题,请不要以短消息方式提问
2012-01-18 14:40
快速回复:动态内存分配问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.081086 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved