C51 实现动态内存分配
前几天尝试了一下C51 keil4编译其中对 malloc的函数的调用,最后感觉可以读取 len 的长度来实现内存分配;
今天尝试写了一下;程序如下;
/********************************************************************************************************/ /* 静态数组长度 */ #define OSAL_MEMORY_LEN 256 /* 静态数组最大长度 */ /********************************************************************************************************/ /********************************************************************************************************/ /* 局部变量定义 */ /* 系统随机分配一个数组,将数组的首地址和数组的长度N作为堆区的空间参数 */ static uint8 x_data membuf[OSAL_MEMORY_LEN]; /********************************************************************************************************/ /* ********************************************************************************************************** **功能描述: 打印指针的地址及其所指向的内容 **入口参数: ** @*addr --- -要打印的地址起始位置 ** @len --- -要打印的地址的长度 **出口参数: 无 **-------------------------=------------------------------------ **函数注释: 无 ********************************************************************************************************** */ void uart_print_register(uint8 *addr, uint16 len) { uint8 tmp[16]; uint16 i; for (i=0; i<len; i++) { <span style="white-space:pre"> </span>memset(tmp, 0, sizeof(tmp)); sprintf(tmp,"%p=0x%-4.2X ",addr,(uint16)*addr++); uart_print_string(UART1, tmp); if ((i+1)%8 == 0) { uart_print_enter(UART1); } } uart_print_enter(UART1); } /* ********************************************************************************************************** **功能描述: 初始化 membuf 静态数组;并调用 init_mempool 函数来初始化动态内存 **入口参数: 无 **出口参数: 无 **-------------------------=------------------------------------ **函数注释: 无 ********************************************************************************************************** */ static void memory_init_membuf(void) { memset (membuf, 0, sizeof(membuf)); init_mempool(membuf, sizeof(membuf)); /* 来初始化 membuf[] 数组;得到一个可以动态分配的堆 */ } /* ********************************************************************************************************** **功能描述: 获取动态内存堆中剩余可分配的字节数 **入口参数: 无 **出口参数: 无 **-------------------------=------------------------------------ **函数注释: 无 ********************************************************************************************************** */ static uint16 memory_read_stacklen(void) { uint16 lw_retlen = 0; if (455 >= OSAL_MEMORY_LEN) { lw_retlen = ((uint16)membuf[2] << 8) | membuf[3]; } else { lw_retlen = ((uint16)membuf[3] << 8) | membuf[4]; } return lw_retlen; } /* ********************************************************************************************************** **功能描述: 动态内存分配 **入口参数: @*num_bytes --- -需要分配的字节数 **出口参数: 未确定类型的指针 **-------------------------=------------------------------------ **函数注释: ** malloc 向系统申请分配指定size个字节的内存空间 ** 返回类型是 void* 类型; void* 表示未确定类型的指针 ** C,C++规定, void* 类型可以通过类型转换强制转换为任何其它类型的指针 ********************************************************************************************************** */ void *osal_malloc(uint16 num_bytes) { void *lp = NULL; if ( num_bytes <= memory_read_stacklen() ) { lp = malloc(num_bytes); } return lp; } /* ********************************************************************************************************** **功能描述: 动态分配完内存后,自动初始化该内存空间为零 **入口参数: ** @*num_bytes --- -需要分配的字节数 ** @size --- -需要分配的变量字长 **出口参数: 未确定类型的指针 **-------------------------=------------------------------------ **函数注释: ** calloc 内存的动态存储区中分配n个长度为size的连续空间 ** 返回类型是 void* 类型; void* 表示未确定类型的指针 ** C,C++规定, void* 类型可以通过类型转换强制转换为任何其它类型的指针 ********************************************************************************************************** */ void *osal_calloc(uint16 num_bytes, unsigned int size) { void *lp = NULL; if ( num_bytes <= memory_read_stacklen() ) { lp = calloc(num_bytes,size); } return lp; } /* ********************************************************************************************************** **功能描述: 释放 malloc 等函数申请的动态内存 **入口参数: @*ptr --- -malloc 等函数申请的动态内存的指针 **出口参数: 无 **-------------------------=------------------------------------ **函数注释: ** 使用后该指针变量一定要重新指向NULL,防止野指针出现,有效规避误操作 ** 对于free(p)这句语句,如果p是NULL指针, 那么free对p无论操作多少次都不会出问题 ** 如果p不是NULL指针,那么free对p连续操作两次就会导致程序运行错误 ********************************************************************************************************** */ void osal_free(void *ptr) { free(ptr); ptr = NULL; } /* ********************************************************************************************************** **功能描述: 从 src 复制 len 个字节内存到 dst **入口参数: ** @*src --- -源地址 ** @*dst --- -目标地址 ** @len --- -拷贝的长度 **出口参数: 返回目标指针 **-------------------------=------------------------------------ **函数注释: ** 使用后该指针变量一定要重新指向NULL,防止野指针出现,有效规避误操作 ** 对于free(p)这句语句,如果p是NULL指针, 那么free对p无论操作多少次都不会出问题 ** 如果p不是NULL指针,那么free对p连续操作两次就会导致程序运行错误 ********************************************************************************************************** */ void *osal_memcpy(void *dst, const void *src, uint16 len) { uint8 *lp_dst; const uint8 *lp_src; lp_src = src; lp_dst = dst; while (len--) { *lp_dst++ = *lp_src++; } return (lp_dst); }
经过多次的尝试,最后确定了如下的参数,静态内存的范围 在 255 - 3072 时,函数满足要求读取出剩余可用的字节数;
一下是测试程序:
首先开辟 lp1len = 100; lp2len = 100; 如果再开辟 lp3len = 100的话;返回NULL
void memory_testrun(void) { uint16 i = 0; uint8 *lp1,*lp2,*lp3,*lp4,*lp5; uart_print_register(membuf, sizeof(membuf)); uart_print_format(UART1, "stacklen is ", "%.0f", (fp32)memory_read_stacklen()); lp1 = osal_malloc(100); lp4 = lp1; if (NULL != lp1) { for(i=0; i<99; i++) { *lp1++ = i%10 + "0"; } *lp1 = 0; uart_print_debug_twostring(UART1, "lp1 :", lp4); uart_print_debug_string(UART1, "lp1 is ok"); } else { uart_print_debug_string(UART1, "lp1 is error"); } lp2 = osal_malloc(100); lp5 = lp2; if (NULL != lp2) { for(i=0; i<99; i++) { *lp2++ = i%10 + "a"; } *lp2 = 0; uart_print_debug_twostring(UART1, "lp2 :", lp5); uart_print_debug_string(UART1, "lp2 is ok"); //osal_free(lp5); } else { uart_print_debug_string(UART1, "lp2 is error"); } lp3 = osal_calloc(100, sizeof(uint8)); if (NULL != lp3) { uart_print_debug_string(UART1, "lp3 is ok"); } else { uart_print_debug_string(UART1, "lp3 is error"); } uart_print_register(membuf, sizeof(membuf)); uart_print_format(UART1, "stacklen is ", "%.0f", (fp32)memory_read_stacklen()); }输出如下;我们卡伊看到 lp3失败;
x:01c8=0x00 x:01c9=0x00 x:01ca=0x00 x:01cb=0xFC x:01cc=0x00 x:01cd=0x00 x:01ce=0x00 x:01cf=0x00 x:01d0=0x00 x:01d1=0x00 x:01d2=0x00 x:01d3=0x00 x:01d4=0x00 x:01d5=0x00 x:01d6=0x00 x:01d7=0x00 x:01d8=0x00 x:01d9=0x00 x:01da=0x00 x:01db=0x00 x:01dc=0x00 x:01dd=0x00 x:01de=0x00 x:01df=0x00 x:01e0=0x00 x:01e1=0x00 x:01e2=0x00 x:01e3=0x00 x:01e4=0x00 x:01e5=0x00 x:01e6=0x00 x:01e7=0x00 x:01e8=0x00 x:01e9=0x00 x:01ea=0x00 x:01eb=0x00 x:01ec=0x00 x:01ed=0x00 x:01ee=0x00 x:01ef=0x00 x:01f0=0x00 x:01f1=0x00 x:01f2=0x00 x:01f3=0x00 x:01f4=0x00 x:01f5=0x00 x:01f6=0x00 x:01f7=0x00 x:01f8=0x00 x:01f9=0x00 x:01fa=0x00 x:01fb=0x00 x:01fc=0x00 x:01fd=0x00 x:01fe=0x00 x:01ff=0x00 x:0200=0x00 x:0201=0x00 x:0202=0x00 x:0203=0x00 x:0204=0x00 x:0205=0x00 x:0206=0x00 x:0207=0x00 x:0208=0x00 x:0209=0x00 x:020a=0x00 x:020b=0x00 x:020c=0x00 x:020d=0x00 x:020e=0x00 x:020f=0x00 x:0210=0x00 x:0211=0x00 x:0212=0x00 x:0213=0x00 x:0214=0x00 x:0215=0x00 x:0216=0x00 x:0217=0x00 x:0218=0x00 x:0219=0x00 x:021a=0x00 x:021b=0x00 x:021c=0x00 x:021d=0x00 x:021e=0x00 x:021f=0x00 x:0220=0x00 x:0221=0x00 x:0222=0x00 x:0223=0x00 x:0224=0x00 x:0225=0x00 x:0226=0x00 x:0227=0x00 x:0228=0x00 x:0229=0x00 x:022a=0x00 x:022b=0x00 x:022c=0x00 x:022d=0x00 x:022e=0x00 x:022f=0x00 x:0230=0x00 x:0231=0x00 x:0232=0x00 x:0233=0x00 x:0234=0x00 x:0235=0x00 x:0236=0x00 x:0237=0x00 x:0238=0x00 x:0239=0x00 x:023a=0x00 x:023b=0x00 x:023c=0x00 x:023d=0x00 x:023e=0x00 x:023f=0x00 x:0240=0x00 x:0241=0x00 x:0242=0x00 x:0243=0x00 x:0244=0x00 x:0245=0x00 x:0246=0x00 x:0247=0x00 x:0248=0x00 x:0249=0x00 x:024a=0x00 x:024b=0x00 x:024c=0x00 x:024d=0x00 x:024e=0x00 x:024f=0x00 x:0250=0x00 x:0251=0x00 x:0252=0x00 x:0253=0x00 x:0254=0x00 x:0255=0x00 x:0256=0x00 x:0257=0x00 x:0258=0x00 x:0259=0x00 x:025a=0x00 x:025b=0x00 x:025c=0x00 x:025d=0x00 x:025e=0x00 x:025f=0x00 x:0260=0x00 x:0261=0x00 x:0262=0x00 x:0263=0x00 x:0264=0x00 x:0265=0x00 x:0266=0x00 x:0267=0x00 x:0268=0x00 x:0269=0x00 x:026a=0x00 x:026b=0x00 x:026c=0x00 x:026d=0x00 x:026e=0x00 x:026f=0x00 x:0270=0x00 x:0271=0x00 x:0272=0x00 x:0273=0x00 x:0274=0x00 x:0275=0x00 x:0276=0x00 x:0277=0x00 x:0278=0x00 x:0279=0x00 x:027a=0x00 x:027b=0x00 x:027c=0x00 x:027d=0x00 x:027e=0x00 x:027f=0x00 x:0280=0x00 x:0281=0x00 x:0282=0x00 x:0283=0x00 x:0284=0x00 x:0285=0x00 x:0286=0x00 x:0287=0x00 x:0288=0x00 x:0289=0x00 x:028a=0x00 x:028b=0x00 x:028c=0x00 x:028d=0x00 x:028e=0x00 x:028f=0x00 x:0290=0x00 x:0291=0x00 x:0292=0x00 x:0293=0x00 x:0294=0x00 x:0295=0x00 x:0296=0x00 x:0297=0x00 x:0298=0x00 x:0299=0x00 x:029a=0x00 x:029b=0x00 x:029c=0x00 x:029d=0x00 x:029e=0x00 x:029f=0x00 x:02a0=0x00 x:02a1=0x00 x:02a2=0x00 x:02a3=0x00 x:02a4=0x00 x:02a5=0x00 x:02a6=0x00 x:02a7=0x00 x:02a8=0x00 x:02a9=0x00 x:02aa=0x00 x:02ab=0x00 x:02ac=0x00 x:02ad=0x00 x:02ae=0x00 x:02af=0x00 x:02b0=0x00 x:02b1=0x00 x:02b2=0x00 x:02b3=0x00 x:02b4=0x00 x:02b5=0x00 x:02b6=0x00 x:02b7=0x00 x:02b8=0x00 x:02b9=0x00 x:02ba=0x00 x:02bb=0x00 x:02bc=0x00 x:02bd=0x00 x:02be=0x00 x:02bf=0x00 x:02c0=0x00 x:02c1=0x00 x:02c2=0x00 x:02c3=0x00 x:02c4=0x00 x:02c5=0x00 x:02c6=0x00 x:02c7=0x00 stacklen is 252 lp1 :012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 lp1 is ok lp2 :abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghi lp2 is ok lp3 is error x:01c8=0x00 x:01c9=0x00 x:01ca=0x00 x:01cb=0x2C x:01cc=0x00 x:01cd=0x00 x:01ce=0x00 x:01cf=0x00 x:01d0=0x00 x:01d1=0x00 x:01d2=0x00 x:01d3=0x00 x:01d4=0x00 x:01d5=0x00 x:01d6=0x00 x:01d7=0x00 x:01d8=0x00 x:01d9=0x00 x:01da=0x00 x:01db=0x00 x:01dc=0x00 x:01dd=0x00 x:01de=0x00 x:01df=0x00 x:01e0=0x00 x:01e1=0x00 x:01e2=0x00 x:01e3=0x00 x:01e4=0x00 x:01e5=0x00 x:01e6=0x00 x:01e7=0x00 x:01e8=0x00 x:01e9=0x00 x:01ea=0x00 x:01eb=0x00 x:01ec=0x00 x:01ed=0x00 x:01ee=0x00 x:01ef=0x00 x:01f0=0x00 x:01f1=0x00 x:01f2=0x00 x:01f3=0x00 x:01f4=0x00 x:01f5=0x00 x:01f6=0x00 x:01f7=0x00 x:01f8=0x00 x:01f9=0x00 x:01fa=0x00 x:01fb=0x64 x:01fc=0x61 x:01fd=0x62 x:01fe=0x63 x:01ff=0x64 x:0200=0x65 x:0201=0x66 x:0202=0x67 x:0203=0x68 x:0204=0x69 x:0205=0x6A x:0206=0x61 x:0207=0x62 x:0208=0x63 x:0209=0x64 x:020a=0x65 x:020b=0x66 x:020c=0x67 x:020d=0x68 x:020e=0x69 x:020f=0x6A x:0210=0x61 x:0211=0x62 x:0212=0x63 x:0213=0x64 x:0214=0x65 x:0215=0x66 x:0216=0x67 x:0217=0x68 x:0218=0x69 x:0219=0x6A x:021a=0x61 x:021b=0x62 x:021c=0x63 x:021d=0x64 x:021e=0x65 x:021f=0x66 x:0220=0x67 x:0221=0x68 x:0222=0x69 x:0223=0x6A x:0224=0x61 x:0225=0x62 x:0226=0x63 x:0227=0x64 x:0228=0x65 x:0229=0x66 x:022a=0x67 x:022b=0x68 x:022c=0x69 x:022d=0x6A x:022e=0x61 x:022f=0x62 x:0230=0x63 x:0231=0x64 x:0232=0x65 x:0233=0x66 x:0234=0x67 x:0235=0x68 x:0236=0x69 x:0237=0x6A x:0238=0x61 x:0239=0x62 x:023a=0x63 x:023b=0x64 x:023c=0x65 x:023d=0x66 x:023e=0x67 x:023f=0x68 x:0240=0x69 x:0241=0x6A x:0242=0x61 x:0243=0x62 x:0244=0x63 x:0245=0x64 x:0246=0x65 x:0247=0x66 x:0248=0x67 x:0249=0x68 x:024a=0x69 x:024b=0x6A x:024c=0x61 x:024d=0x62 x:024e=0x63 x:024f=0x64 x:0250=0x65 x:0251=0x66 x:0252=0x67 x:0253=0x68 x:0254=0x69 x:0255=0x6A x:0256=0x61 x:0257=0x62 x:0258=0x63 x:0259=0x64 x:025a=0x65 x:025b=0x66 x:025c=0x67 x:025d=0x68 x:025e=0x69 x:025f=0x00 x:0260=0x00 x:0261=0x00 x:0262=0x00 x:0263=0x64 x:0264=0x30 x:0265=0x31 x:0266=0x32 x:0267=0x33 x:0268=0x34 x:0269=0x35 x:026a=0x36 x:026b=0x37 x:026c=0x38 x:026d=0x39 x:026e=0x30 x:026f=0x31 x:0270=0x32 x:0271=0x33 x:0272=0x34 x:0273=0x35 x:0274=0x36 x:0275=0x37 x:0276=0x38 x:0277=0x39 x:0278=0x30 x:0279=0x31 x:027a=0x32 x:027b=0x33 x:027c=0x34 x:027d=0x35 x:027e=0x36 x:027f=0x37 x:0280=0x38 x:0281=0x39 x:0282=0x30 x:0283=0x31 x:0284=0x32 x:0285=0x33 x:0286=0x34 x:0287=0x35 x:0288=0x36 x:0289=0x37 x:028a=0x38 x:028b=0x39 x:028c=0x30 x:028d=0x31 x:028e=0x32 x:028f=0x33 x:0290=0x34 x:0291=0x35 x:0292=0x36 x:0293=0x37 x:0294=0x38 x:0295=0x39 x:0296=0x30 x:0297=0x31 x:0298=0x32 x:0299=0x33 x:029a=0x34 x:029b=0x35 x:029c=0x36 x:029d=0x37 x:029e=0x38 x:029f=0x39 x:02a0=0x30 x:02a1=0x31 x:02a2=0x32 x:02a3=0x33 x:02a4=0x34 x:02a5=0x35 x:02a6=0x36 x:02a7=0x37 x:02a8=0x38 x:02a9=0x39 x:02aa=0x30 x:02ab=0x31 x:02ac=0x32 x:02ad=0x33 x:02ae=0x34 x:02af=0x35 x:02b0=0x36 x:02b1=0x37 x:02b2=0x38 x:02b3=0x39 x:02b4=0x30 x:02b5=0x31 x:02b6=0x32 x:02b7=0x33 x:02b8=0x34 x:02b9=0x35 x:02ba=0x36 x:02bb=0x37 x:02bc=0x38 x:02bd=0x39 x:02be=0x30 x:02bf=0x31 x:02c0=0x32 x:02c1=0x33 x:02c2=0x34 x:02c3=0x35 x:02c4=0x36 x:02c5=0x37 x:02c6=0x38 x:02c7=0x00 stacklen is 44首先开辟 lp1len = 100; lp2len = 100;释放lp2; 如果再开辟 lp3len = 100的话;那么应该可以成功;把上面的函数这个 osal_free(lp5)加入函数中;
输出结果如下
x:01c8=0x00 x:01c9=0x00 x:01ca=0x00 x:01cb=0xFC x:01cc=0x00 x:01cd=0x00 x:01ce=0x00 x:01cf=0x00 x:01d0=0x00 x:01d1=0x00 x:01d2=0x00 x:01d3=0x00 x:01d4=0x00 x:01d5=0x00 x:01d6=0x00 x:01d7=0x00 x:01d8=0x00 x:01d9=0x00 x:01da=0x00 x:01db=0x00 x:01dc=0x00 x:01dd=0x00 x:01de=0x00 x:01df=0x00 x:01e0=0x00 x:01e1=0x00 x:01e2=0x00 x:01e3=0x00 x:01e4=0x00 x:01e5=0x00 x:01e6=0x00 x:01e7=0x00 x:01e8=0x00 x:01e9=0x00 x:01ea=0x00 x:01eb=0x00 x:01ec=0x00 x:01ed=0x00 x:01ee=0x00 x:01ef=0x00 x:01f0=0x00 x:01f1=0x00 x:01f2=0x00 x:01f3=0x00 x:01f4=0x00 x:01f5=0x00 x:01f6=0x00 x:01f7=0x00 x:01f8=0x00 x:01f9=0x00 x:01fa=0x00 x:01fb=0x00 x:01fc=0x00 x:01fd=0x00 x:01fe=0x00 x:01ff=0x00 x:0200=0x00 x:0201=0x00 x:0202=0x00 x:0203=0x00 x:0204=0x00 x:0205=0x00 x:0206=0x00 x:0207=0x00 x:0208=0x00 x:0209=0x00 x:020a=0x00 x:020b=0x00 x:020c=0x00 x:020d=0x00 x:020e=0x00 x:020f=0x00 x:0210=0x00 x:0211=0x00 x:0212=0x00 x:0213=0x00 x:0214=0x00 x:0215=0x00 x:0216=0x00 x:0217=0x00 x:0218=0x00 x:0219=0x00 x:021a=0x00 x:021b=0x00 x:021c=0x00 x:021d=0x00 x:021e=0x00 x:021f=0x00 x:0220=0x00 x:0221=0x00 x:0222=0x00 x:0223=0x00 x:0224=0x00 x:0225=0x00 x:0226=0x00 x:0227=0x00 x:0228=0x00 x:0229=0x00 x:022a=0x00 x:022b=0x00 x:022c=0x00 x:022d=0x00 x:022e=0x00 x:022f=0x00 x:0230=0x00 x:0231=0x00 x:0232=0x00 x:0233=0x00 x:0234=0x00 x:0235=0x00 x:0236=0x00 x:0237=0x00 x:0238=0x00 x:0239=0x00 x:023a=0x00 x:023b=0x00 x:023c=0x00 x:023d=0x00 x:023e=0x00 x:023f=0x00 x:0240=0x00 x:0241=0x00 x:0242=0x00 x:0243=0x00 x:0244=0x00 x:0245=0x00 x:0246=0x00 x:0247=0x00 x:0248=0x00 x:0249=0x00 x:024a=0x00 x:024b=0x00 x:024c=0x00 x:024d=0x00 x:024e=0x00 x:024f=0x00 x:0250=0x00 x:0251=0x00 x:0252=0x00 x:0253=0x00 x:0254=0x00 x:0255=0x00 x:0256=0x00 x:0257=0x00 x:0258=0x00 x:0259=0x00 x:025a=0x00 x:025b=0x00 x:025c=0x00 x:025d=0x00 x:025e=0x00 x:025f=0x00 x:0260=0x00 x:0261=0x00 x:0262=0x00 x:0263=0x00 x:0264=0x00 x:0265=0x00 x:0266=0x00 x:0267=0x00 x:0268=0x00 x:0269=0x00 x:026a=0x00 x:026b=0x00 x:026c=0x00 x:026d=0x00 x:026e=0x00 x:026f=0x00 x:0270=0x00 x:0271=0x00 x:0272=0x00 x:0273=0x00 x:0274=0x00 x:0275=0x00 x:0276=0x00 x:0277=0x00 x:0278=0x00 x:0279=0x00 x:027a=0x00 x:027b=0x00 x:027c=0x00 x:027d=0x00 x:027e=0x00 x:027f=0x00 x:0280=0x00 x:0281=0x00 x:0282=0x00 x:0283=0x00 x:0284=0x00 x:0285=0x00 x:0286=0x00 x:0287=0x00 x:0288=0x00 x:0289=0x00 x:028a=0x00 x:028b=0x00 x:028c=0x00 x:028d=0x00 x:028e=0x00 x:028f=0x00 x:0290=0x00 x:0291=0x00 x:0292=0x00 x:0293=0x00 x:0294=0x00 x:0295=0x00 x:0296=0x00 x:0297=0x00 x:0298=0x00 x:0299=0x00 x:029a=0x00 x:029b=0x00 x:029c=0x00 x:029d=0x00 x:029e=0x00 x:029f=0x00 x:02a0=0x00 x:02a1=0x00 x:02a2=0x00 x:02a3=0x00 x:02a4=0x00 x:02a5=0x00 x:02a6=0x00 x:02a7=0x00 x:02a8=0x00 x:02a9=0x00 x:02aa=0x00 x:02ab=0x00 x:02ac=0x00 x:02ad=0x00 x:02ae=0x00 x:02af=0x00 x:02b0=0x00 x:02b1=0x00 x:02b2=0x00 x:02b3=0x00 x:02b4=0x00 x:02b5=0x00 x:02b6=0x00 x:02b7=0x00 x:02b8=0x00 x:02b9=0x00 x:02ba=0x00 x:02bb=0x00 x:02bc=0x00 x:02bd=0x00 x:02be=0x00 x:02bf=0x00 x:02c0=0x00 x:02c1=0x00 x:02c2=0x00 x:02c3=0x00 x:02c4=0x00 x:02c5=0x00 x:02c6=0x00 x:02c7=0x00 stacklen is 252 lp1 :012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 lp1 is ok lp2 :abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghi lp2 is ok lp3 is ok x:01c8=0x00 x:01c9=0x00 x:01ca=0x00 x:01cb=0x2C x:01cc=0x00 x:01cd=0x00 x:01ce=0x00 x:01cf=0x00 x:01d0=0x00 x:01d1=0x00 x:01d2=0x00 x:01d3=0x00 x:01d4=0x00 x:01d5=0x00 x:01d6=0x00 x:01d7=0x00 x:01d8=0x00 x:01d9=0x00 x:01da=0x00 x:01db=0x00 x:01dc=0x00 x:01dd=0x00 x:01de=0x00 x:01df=0x00 x:01e0=0x00 x:01e1=0x00 x:01e2=0x00 x:01e3=0x00 x:01e4=0x00 x:01e5=0x00 x:01e6=0x00 x:01e7=0x00 x:01e8=0x00 x:01e9=0x00 x:01ea=0x00 x:01eb=0x00 x:01ec=0x00 x:01ed=0x00 x:01ee=0x00 x:01ef=0x00 x:01f0=0x00 x:01f1=0x00 x:01f2=0x00 x:01f3=0x00 x:01f4=0x00 x:01f5=0x00 x:01f6=0x00 x:01f7=0x00 x:01f8=0x00 x:01f9=0x00 x:01fa=0x00 x:01fb=0x64 x:01fc=0x00 x:01fd=0x00 x:01fe=0x00 x:01ff=0x00 x:0200=0x00 x:0201=0x00 x:0202=0x00 x:0203=0x00 x:0204=0x00 x:0205=0x00 x:0206=0x00 x:0207=0x00 x:0208=0x00 x:0209=0x00 x:020a=0x00 x:020b=0x00 x:020c=0x00 x:020d=0x00 x:020e=0x00 x:020f=0x00 x:0210=0x00 x:0211=0x00 x:0212=0x00 x:0213=0x00 x:0214=0x00 x:0215=0x00 x:0216=0x00 x:0217=0x00 x:0218=0x00 x:0219=0x00 x:021a=0x00 x:021b=0x00 x:021c=0x00 x:021d=0x00 x:021e=0x00 x:021f=0x00 x:0220=0x00 x:0221=0x00 x:0222=0x00 x:0223=0x00 x:0224=0x00 x:0225=0x00 x:0226=0x00 x:0227=0x00 x:0228=0x00 x:0229=0x00 x:022a=0x00 x:022b=0x00 x:022c=0x00 x:022d=0x00 x:022e=0x00 x:022f=0x00 x:0230=0x00 x:0231=0x00 x:0232=0x00 x:0233=0x00 x:0234=0x00 x:0235=0x00 x:0236=0x00 x:0237=0x00 x:0238=0x00 x:0239=0x00 x:023a=0x00 x:023b=0x00 x:023c=0x00 x:023d=0x00 x:023e=0x00 x:023f=0x00 x:0240=0x00 x:0241=0x00 x:0242=0x00 x:0243=0x00 x:0244=0x00 x:0245=0x00 x:0246=0x00 x:0247=0x00 x:0248=0x00 x:0249=0x00 x:024a=0x00 x:024b=0x00 x:024c=0x00 x:024d=0x00 x:024e=0x00 x:024f=0x00 x:0250=0x00 x:0251=0x00 x:0252=0x00 x:0253=0x00 x:0254=0x00 x:0255=0x00 x:0256=0x00 x:0257=0x00 x:0258=0x00 x:0259=0x00 x:025a=0x00 x:025b=0x00 x:025c=0x00 x:025d=0x00 x:025e=0x00 x:025f=0x00 x:0260=0x00 x:0261=0x00 x:0262=0x00 x:0263=0x64 x:0264=0x30 x:0265=0x31 x:0266=0x32 x:0267=0x33 x:0268=0x34 x:0269=0x35 x:026a=0x36 x:026b=0x37 x:026c=0x38 x:026d=0x39 x:026e=0x30 x:026f=0x31 x:0270=0x32 x:0271=0x33 x:0272=0x34 x:0273=0x35 x:0274=0x36 x:0275=0x37 x:0276=0x38 x:0277=0x39 x:0278=0x30 x:0279=0x31 x:027a=0x32 x:027b=0x33 x:027c=0x34 x:027d=0x35 x:027e=0x36 x:027f=0x37 x:0280=0x38 x:0281=0x39 x:0282=0x30 x:0283=0x31 x:0284=0x32 x:0285=0x33 x:0286=0x34 x:0287=0x35 x:0288=0x36 x:0289=0x37 x:028a=0x38 x:028b=0x39 x:028c=0x30 x:028d=0x31 x:028e=0x32 x:028f=0x33 x:0290=0x34 x:0291=0x35 x:0292=0x36 x:0293=0x37 x:0294=0x38 x:0295=0x39 x:0296=0x30 x:0297=0x31 x:0298=0x32 x:0299=0x33 x:029a=0x34 x:029b=0x35 x:029c=0x36 x:029d=0x37 x:029e=0x38 x:029f=0x39 x:02a0=0x30 x:02a1=0x31 x:02a2=0x32 x:02a3=0x33 x:02a4=0x34 x:02a5=0x35 x:02a6=0x36 x:02a7=0x37 x:02a8=0x38 x:02a9=0x39 x:02aa=0x30 x:02ab=0x31 x:02ac=0x32 x:02ad=0x33 x:02ae=0x34 x:02af=0x35 x:02b0=0x36 x:02b1=0x37 x:02b2=0x38 x:02b3=0x39 x:02b4=0x30 x:02b5=0x31 x:02b6=0x32 x:02b7=0x33 x:02b8=0x34 x:02b9=0x35 x:02ba=0x36 x:02bb=0x37 x:02bc=0x38 x:02bd=0x39 x:02be=0x30 x:02bf=0x31 x:02c0=0x32 x:02c1=0x33 x:02c2=0x34 x:02c3=0x35 x:02c4=0x36 x:02c5=0x37 x:02c6=0x38 x:02c7=0x00 stacklen is 44上面的函数只是简单的实现了内存的分配,是否能应用在真正的项目中还未可知;
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 链接脚本在编程中的高级运用之一:可变长数组
- 下一篇: C51回顾二