社区
汇编语言
帖子详情
如何用asm实现C语言中的malloc和free函数
Richard2003
2004-08-12 07:55:39
同题
...全文
211
13
打赏
收藏
如何用asm实现C语言中的malloc和free函数
同题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
monstermonkey
2004-08-15
打赏
举报
回复
完全没有必要,使用汇编完全就是艺术
jacklee19822001
2004-08-14
打赏
举报
回复
脱离操作系统
自己想干什么就干什么
YUGIBALSA
2004-08-14
打赏
举报
回复
如果用MASM开发WIN32程序,可以用MASM库里的Alloc和Free
过客猫2022
2004-08-13
打赏
举报
回复
你要看看内存是怎么管理的了~
xuanyuanhaobo
2004-08-13
打赏
举报
回复
除非你知道这个OS的内存分配原则
xuanyuanhaobo
2004-08-13
打赏
举报
回复
因为内存分配与 OS 严密相关!
如果要在某个OS下分配内存 就要调用这个系统的分配内存的API
yyyaaa
2004-08-13
打赏
举报
回复
masm8中好想有IMALLCO和IFREE函数
vicallee
2004-08-13
打赏
举报
回复
以这种方式申请的内存,倒是不用自己来释放的.等于是定义内存变量之类的.做不到动态.
以前见过一个贴子讲过可以在DOS下中断申请,具体不记得了.
Richard2003
2004-08-12
打赏
举报
回复
如何释放呢???
vicallee
2004-08-12
打赏
举报
回复
你可以自己实现
malloc macro _n
local @mem
.data
@mem db _n dup(0)
.code
exitm <offset @mem>
endm
类似了,差不多吧哈.
如果是win32下,是有专门的函数的
invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,_n
invoke GlobalFree,eax
Richard2003
2004-08-12
打赏
举报
回复
没有代码的,或思路的,不要空谈
xinsun
2004-08-12
打赏
举报
回复
汇编中,内存全都是你的。自己掌握分寸随便用就可以了。只要自己不乱。内存不用new,用完之后也不用delete
大熊猫侯佩
2004-08-12
打赏
举报
回复
楼主用 debug 中的 t 指令 跟跟看
-C++参考大全(第四版) (2010 年度畅销榜
C.参考大全第四版 本书是根据著名
C语言
专家HerbertSchildt的著作翻译的。这是一本关于C++语言的百科全书,包括C和C++的命令、功能、编程和应用等方面的内容。全书分为五个部分:C++基础:C子集;C++的专有特征;标准
函数
库;标准C++类库;C++应用程序范例。详细描述和演示了定义C++语言的关键字、语法、
函数
、类和特征。其
中
第一部分全面讨论了C++的C子集;第二部分详细介绍了C++本身的特性,如类和对象、构造
函数
、析构
函数
和模板等;第三部分描述了标准
函数
库;第四部分讨论了标准类库,包括STL(标准模板库);第五部分显示了两个应用C++和面向对象编程的实际例子。 本书内容全面、翔实,是学习C++编程语言的广大学生的一部有用的工具书,也是对C++感兴趣的读者的必备参考书。 第一部分 C++基础:C子集 第1章
C语言
概述 1.1
C语言
的起源和历史 1.2
C语言
是
中
级语言 1.3
C语言
是结构化语言 1.4
C语言
是程序员的语言 1.5 C程序的结构 1.6 库和链接 1.7 分别编译 1.8 理解.C和.CPP文件扩展 第2章 表达式 2.1 五种基本数据类型 2.2 修饰基本类型 2.3 标识符名称 2.4 变量 2.5 const和volatile限定符 2.6 存储类限定符 2.7 变量初始化 2.8 常量 2.9 运算符 2.10 表达式 第3章 语句 3.1 C和C++
中
的真值和假值 3.2 选择语句 3.3 迭代语句 3.4 在选择和迭代语句内声明变量 3.5 跳转语句 3.6 表达式语句 3.7 块语句 第4章 数组和以null结束的字符串 4.1 一维数组 4.2 生成指向数组的指针 4.3 向
函数
传递一维数组 4.4 以null结束的字符串 4.5 二维数组 4.6 多维数组 4.7 带下标的指针 4.8 数组初始化 4.9 棋盘游戏实例 第5章 指针 5.1 什么是指针 5.2 指针变量 5.3 指针运算符 5.4 指针表达式 5.5 指针和数组 5.6 多级间址 5.7 初始化指针 5.8 指向
函数
的指针 5.9
C语言
的动态分配
函数
5.10 指针应用
中
的问题 第6章
函数
6.1
函数
的一般形式 6.2 数作用域的规则 6.3
函数
变元 6.4 传给main()的变元argc和argv 6.5 return语句 6.6 递归 6.7
函数
原型 6.8 声明变长参数列表 6.9 传统的与现代的
函数
参数声明 第7章 结构、联合、枚举和用户定义的类型 7.1 结构 7.2 结构数组 7.3 向
函数
传递结构 7.4 结构指针 7.5 结构
中
的数组和结构 7.6 位域 7.7 联合 7.8 枚举 7.9 用sizeof来保证可移植性 7.10 typedef 第8章 C风格的控制台I/O 8.1 一个重要的应用说明 8.2 读写字符 8.3 读写字符串 8.4 格式化的控制台I/O 8.5 printf() 8.6 scanf() 第9章 文件I/O 9.1 C与C++的文件I/O 9.2 流和文件 9.3 流 9.4 文件 9.5 文件系统基础 9.6 fread()和fwrite() 9.7 fseek()和随机访问I/O 9.8 fprintf()和fscanf() 9.9 标准流 第10章 预处理器和注释 10.1 预处理器 10.2 #define 10.3 #error 10.4 #include 10.5 条件编译指令 10.6 #undef 10.7 使用defined 10.8 #line 10.9 #pragma 10.10 #和##预处理器运算符 10.11 预定义的宏名 10.12 注释 第二部分 C++的专有特征 第11章 C++语言概述 11.1 C++的起源 11.2 什么是面向对象的程序设计 11.3 C++基础 11.4 老的C++与现代C++ 11.5 C++的类 11.6
函数
重载 11.7 运算符重载 11.8 继承 11.9 构造
函数
和析构
函数
11.10 C++的关键字 11.11 C++程序的一般形式 第12章 类和对象 12.1 类 12.2 结构和类是相互关联的 12.3 联合和类是相互关联的 12.4 友元
函数
12.5 友元类 12.6 内联
函数
12.7 在类
中
定义内联
函数
12.8 带参数的构造
函数
12.9 带一个参数的构造
函数
:特例 12.10 静态类成员 12.11 何时执行构造
函数
和析构
函数
12.12 作用域分辨符 12.13 嵌套类 12.14 局部类 12.15 向
函数
传递对象 12.16 返回对象 12.17 对象赋值 第13章 数组、指针、引用和动态分配运算符 13.1 对象数组 13.2 指向对象的指针 13.3 C++指针的类型检查 13.4 this指针 13.5 指向派生类型的指针 13.6 指向类成员的指针 13.7 引用 13.8 格式问题 13.9 C++的动态分配运算符 第14章
函数
重载、拷贝构造
函数
和默认变元 14.1
函数
重载 14.2 重载构造
函数
14.3 拷贝构造
函数
14.4 查找重载
函数
的地址 14.5 重载的过去与现在 14.6 默认的
函数
变元 14.7
函数
重载和二义性 第15章 运算符重载 15.1 创建成员运算符
函数
15.2 使用友元
函数
的运算符重载 15.3 重载new和delete 15.4 重载某些特殊运算符 15.5 重载逗号运算符 第16章 继承 16.1 基类访问控制 16.2 继承和保护成员 16.3 继承多个基类 16.4 构造
函数
、析构
函数
和继承 16.5 准许访问 16.6 虚基类 第17章 虚
函数
与多态性 17.1 虚
函数
17.2 继承虚属性 17.3 虚
函数
是分层的 17.4 纯虚
函数
17.5 使用虚
函数
17.6 早期绑定与后期绑定 第18章 模板 18.1 通用
函数
18.2 应用通用
函数
18.3 通用类 18.4 关键字typename和export 18.5 模板的功用 第19章 异常处理 19.1 异常处理基础 19.2 处理派生类异常 19.3 异常处理选项 19.4 理解terminate()和unexpected() 19.5 uncaught_exception()
函数
19.6 exception和bad_exception类 19.7 异常处理的应用 第20章 C++输入/输出系统基础 20.1 老的C++I/O与现代的C++I/O 20.2 C++的流 20.3 C++的流类 20.4格式化的I/O 20.5 重载 第21章 C++文件的输入/输出 21.1 和文件类 21.2 打开和关闭文件 21.3 读写文本文件 21.4 无格式和二进制I/O 21.5 其他get()
函数
21.6 getline()
函数
21.7 检测EOF 21.8 ignore()
函数
21.9 peek()和putback()
函数
21.10 flush()
函数
21.11 随机访问 21.12 I/O状态 21.13 定制的I/O和文件 第22章 运行时类型标识与强制转换运算符 22.1 运行时类型标识 22.2 强制转换运算符 22.3 dynamic_cast 第23章 名字空间、转换
函数
和其他高级主题 23.1 名字空间 23.2 std名字空间 23.3 创建转换
函数
23.4 const成员
函数
与mutable 23.5 volatile成员
函数
23.6 explicit构造
函数
23.7 成员初始化语法 23.8 利用关键字
asm
23.9 连接说明 23.10 基于数组的I/O 23.11 C与C++的区别 第24章 标准模板库 24.1 STL概述 24.2 容器类 24.3 一般的操作原理 24.4 vector容器 24.5 list容器 24.6 map容器 24.7 算法 24.8 使用
函数
对象 24.9 string类 24.10 关于STL的最后一点说明 第三部分 标准
函数
库 第25章 基子C的输入/输出
函数
25.1 clearerr
函数
25.2 fclose
函数
25.3 feof
函数
25.4 ferror
函数
25.5 fflush
函数
25.6 fSetc
函数
25.7 fgetpos
函数
25.8 fSets
函数
25.9 fopen
函数
25.10 fprintf
函数
25.11 fputc
函数
25.12 fputs
函数
25.13 fread
函数
25.14 freopen
函数
25.15 fscmff
函数
25.16 fseek
函数
25.17 fsetpos
函数
25.18 ftell
函数
25.19 fwrite
函数
25.20 gete
函数
25.21 getchar
函数
25.22 gets
函数
25.23 perror
函数
25.24 prinff
函数
25.25 putc
函数
25.26 putchar
函数
25.27 puts
函数
25.28 remove
函数
25.29 rename
函数
25.30 rewind
函数
25.31 scanf
函数
25.32 setbuf
函数
25.33 setvbuf
函数
25.34 sprinff
函数
25.35 sscanf
函数
25.36 tmpfile
函数
25.37 tmpnam
函数
25.38 ungetc
函数
25.39 vpfintf,vfpfintf和vsprintf
函数
第26章 字符串与字符
函数
26.1 isalnum
函数
26.2 isalpha
函数
26.3 iscntrl
函数
26.4 isdiSit
函数
26.5 isgraph
函数
26.6 islower
函数
26.7 isprint
函数
26.8 ispunct
函数
26.9 isspace
函数
26.10 isupper
函数
26.11 isxdiSit
函数
26.12 memchr
函数
26.13 memcmp
函数
26.14 memcpy
函数
26.15 memmove
函数
26.16 memset
函数
26.17 strcat
函数
26.18 strchr
函数
26.19 strcmp
函数
26.20 strcoll
函数
26.21 strcpy
函数
26.22 strcspn
函数
26.23 strerror
函数
26.24 strlen
函数
26.25 strncat
函数
26.26 stmcmp
函数
26.27 strncpy
函数
26.28 strpbrk
函数
26.29 strrchr
函数
26.30 strspn
函数
26.31 strstr
函数
26.32 strtok
函数
26.33 strxfrm
函数
26.34 tolower
函数
26.35 toupper
函数
第27章 数学
函数
27.1 acos
函数
27.2 asin
函数
27.3 atan
函数
27.4 atan2
函数
27.5 ceil
函数
27.6 COS
函数
27.7 cosh
函数
27.8 exp
函数
27.9 fabs
函数
27.10 floor
函数
27.11 fmod
函数
27.12 kexp
函数
27.13 ldexp
函数
27.14 log
函数
27.15 loglO
函数
27.16 modf
函数
27.17 pow
函数
27.18 sin
函数
27.19 sinh
函数
27.20 sqrt
函数
27.21 tan
函数
27.22 tanh
函数
第28章 时间、日期和定位
函数
28.1 asctime
函数
28.2 clock
函数
28.3 ctime
函数
28.4 difftime
函数
28.5 gmtime
函数
28.6 localeeonv
函数
28.7 localtime
函数
28.8 mktime
函数
28.9 setlocale
函数
28.10 strftime
函数
28.11 time
函数
第29章 动态分配
函数
29.1 calloc
函数
29.2
free
函数
29.3
malloc
函数
29.4 realloe
函数
第30章 实用
函数
30.1 abort
函数
30.2 abs
函数
30.3 assert
函数
30.4 atexit
函数
30.5 atof
函数
30.6 atoi
函数
30.7 atol
函数
30.8 bsearch
函数
30.9 div
函数
30.10 exit
函数
30.11 getenv
函数
30.12 labs
函数
30.13 ldiv
函数
30.14 longjmp
函数
30.15 mblen
函数
30.16 mbstowes
函数
30.17 mbtowc
函数
30.18 qsort
函数
30.19 raise
函数
30.20 rand
函数
30.21 setjmp
函数
30.22 signal
函数
30.23 srand
函数
30.24 strtod
函数
30.25 strtol
函数
30.26 strtoul
函数
30.27 system
函数
30.28 va_arg,va_start和va end
函数
. 30.29 wcstombs
函数
30.30 wctomb
函数
第31章 宽字符
函数
31.1 宽字符分类
函数
31.2 宽字符I/O
函数
31.3 宽字符串
函数
31.4 宽字符串转换
函数
31.5 宽字符数组
函数
31.6 多字节/宽字符转换
函数
第四部分 标准C++类库 第32章 标准C++I/O类 32.1 I/O类 32.2 I/O头文件 32.3 格式化标记和I/O操作算子 32.4 几个数据类型 32.5 重载运算符 32.6 通用的I/O
函数
第33章 STL容器类 33.1 容器类 第34章 STL算法 34.1 adjacent_find 34.2 binary_search 34.3 copy 34.4 copy_backward 34.5 count 34.6 count_if 34.7 equal 34.8 equal_range 34.9 flll和fill_n 34.10 find 34.11 find_end 34.12 find_first_of 34.13 find_if 34.14 for_each 34.15 generate和generate_n 34.16 includes 34.17 inplace_merge 34.18 iter_swap 34.19 lexicographical_compare 34.20 lower_bound 34.21 make_heap 34.22 max 34.23 max_element 34.24 merge 34.25 min 34.26 min_element 34.27 mismatch 34.28 next_permutation 34.29 nth_element 34.30 partial sort 34.31 partial sort_copy 34.32 partition 34.33 pop_heap 34.34 prev_permutation 34.35 push_heap 34.36 random_shuffle 34.37 remove,remove_if,remove copy和remove_copy_if 34.38 replace,replace_copy,replace_if和replace_copy_if 34.39 reverse和reverse_copy 34.40 rotate和rotate_copy 34.41 search 34.42 search_n 34.43 set_difference 34.44 set_intersection 34.45 set_symmetric_difference 34.46 set_union 34.47 sort 34.48 sort_heap 34.49 stable_partition 34.50 stable_sort 34.51 swap 34.52 swap_ranges 34.53 transform 34.54 unique和unique_copy 34.55 upper_bound 第35章 STL迭代器、分配器和
函数
对象 35.1 迭代器 35.2
函数
对象 35.3 分配器 第36章 字符串类 36.1 basic_string类 36.2 char_traits类 第37章 数字类 37.1 complex类 37.2 valarray类 37.3 数字算法 第38章 异常处理和杂项类 38.1 异常 38.2 auto_ptr 38.3 pair类 38.4 本地化 38.5 其他有趣的类 第五部分 C++应用程序范例 第39章 集成新的类:自定义字符串类 39.1 StrType类 39.2 构造
函数
和析构
函数
39.3 字符串I/O 39.4 赋值
函数
39.5 连接 39.6 子字符串减法 39.7 关系运算符 39.8 各种字符串
函数
39.9 完整的StrType类 39.10 使用StrType类 39.11 创建和集成新类型 39.12 挑战 第40章 分析表达式 40.1 表达式 40.2 分析表达式:问题 40.3 分析一个表达式 40.4 parser类 40.5 剖析一个表达式 40.6 一个简单的表达式分析器 40.7 向分析器
中
添加变量 40.8 递归下降分析器
中
的语法检查 40.9 构建一个通用的分析器 40.10 需要试验的一些东西 附录A C++的.NET可管理扩展 附录B C++和机器人时代
vld(Visual Leak Detector 内存泄露检测工具 源码)
初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题。当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题。内存泄漏是最常见的内存问题之一。内存泄漏如果不是很严重,在短时间内对程序不会有太大的影响,这也使得内存泄漏问题有很强的隐蔽性,不容易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的,从性能下降到内存耗尽,甚至会影响到其他程序的正常运行。另外内存问题的一个共同特点是,内存问题本身并不会有很明显的现象,当有异常现象出现时已时过境迁,其现场已非出现问题时的现场了,这给调试内存问题带来了很大的难度。 Visual Leak Detector是一款用于Visual C++的免费的内存泄露检测工具。相比较其它的内存泄露检测工具,它在检测到内存泄漏的同时,还具有如下特点: 1、 可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号; 2、 可以得到泄露内存的完整数据; 3、 可以设置内存泄露报告的级别; 4、 它是一个已经打包的lib,使用时无须编译它的源代码。而对于使用者自己的代码,也只需要做很小的改动; 5、 他的源代码使用GNU许可发布,并有详尽的文档及注释。对于想深入了解堆内存管理的读者,是一个不错的选择。 可见,从使用角度来讲,Visual Leak Detector简单易用,对于使用者自己的代码,唯一的修改是#include Visual Leak Detector的头文件后正常运行自己的程序,就可以发现内存问题。从研究的角度来讲,如果深入Visual Leak Detector源代码,可以学习到堆内存分配与释放的原理、内存泄漏检测的原理及内存操作的常用技巧等。 本文首先将介绍Visual Leak Detector的使用方法与步骤,然后再和读者一起初步的研究Visual Leak Detector的源代码,去了解Visual Leak Detector的工作原理。 使用Visual Leak Detector(1.0) 下面让我们来介绍如何使用这个小巧的工具。 首先从网站上下载zip包,解压之后得到vld.h, vldapi.h, vld.lib, vldmt.lib, vldmtdll.lib, dbghelp.dll等文件。将.h文件拷贝到Visual C++的默认include目录下,将.lib文件拷贝到Visual C++的默认lib目录下,便安装完成了。因为版本问题,如果使用windows 2000或者以前的版本,需要将dbghelp.dll拷贝到你的程序的运行目录下,或其他可以引用到的目录。 接下来需要将其加入到自己的代码
中
。方法很简单,只要在包含入口
函数
的.cpp文件
中
包含vld.h就可以。如果这个cpp文件包含了stdafx.h,则将包含vld.h的语句放在stdafx.h的包含语句之后,否则放在最前面。如下是一个示例程序: #include void main() { … } 接下来让我们来演示如何使用Visual Leak Detector检测内存泄漏。下面是一个简单的程序,用new分配了一个int大小的堆内存,并没有释放。其申请的内存地址用printf输出到屏幕上。 #include #include #include void f() { int *p = new int(0x12345678); printf("p=%08x, ", p); } void main() { f(); } 编译运行后,在标准输出窗口得到: p=003a89c0 在Visual C++的Output窗口得到: WARNING: Visual Leak Detector detected memory leaks! ---------- Block 57 at 0x003A89C0: 4 bytes ---------- --57号块0x003A89C0地址泄漏了4个字节 Call Stack: --下面是调用堆栈 d:\test\testvldconsole\testvldconsole\main.cpp (7): f --表示在main.cpp第7行的f()
函数
d:\test\testvldconsole\testvldconsole\main.cpp (14): main –双击以引导至对应代码处 f:\rtm\vctools\crt_bld\self_x8
stm32 使用arm gcc
实现
malloc
和
free
对于 stm32c8t6 来说 rom 是64k ram 是 20k。使用静态库的libnosys.a
实现
的_sbrk
函数
是可以使用
malloc
和
free
的。但是有个问题就是没有边界检查。 ram 的范围是0x20000000-0x20005000,申请的内存会超过 0x20005000。这样就好引发HardFault_Handler 异常。 可以这样重定向_sbrk
函数
。堆增长的时
c语言
链表
malloc
,
C语言
,for循环创建链表节点,第二次循环的到链表
malloc
就直接触发断点...
[
Asm
] 纯文本查看 复制代码#include"readwreit.h"//获取有效行文件int GetRow_Info(FILE *file){if (NULL == file){return 0;}int lines = 0;char buf[1024] = { 0 };while (fgets(buf, 1024, file) != NULL){//调用JudgRow_Info
函数
判断当...
重定向C库部分
函数
的方法,包含printf、
malloc
、
free
、fopen等
函数
如在移植LUA解释器时,源码
中
会调用C库的fopen、fread等
函数
,一定要将前面的fputc注释掉,因为在编译时fputc的优先级要大于_sys_write,这就导致printf、fwirte都会重定向到fputc
中
。以及在产品使用
中
,通过对关键运行状态的输出,对于运行故障的判断分析,具有很高的价值。当动态分配内存时,存储的是字符型数据,每个元素1字节,所以字节数刚好等于需要存储的元素个数(字符数+1);如果存储的是整型或浮点型数据,字节数等于“需要存储的元素个数 * 一个元素的字节数”,
汇编语言
21,459
社区成员
41,600
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章