关于局部的字符串常量是存放在全局的常量区还是栈区,不同的编译器有不同的实现。可以通过汇编语言察看一下。不过vc环境下,局部常量就像局部变量一样存储于栈中,全局常量、字符常量存储于文字常量区。TC在常量区。
gcc -c *.c
gcc *.o -Map test.txt -o test.elf
3)高端内存区(HMA)是英文High Memory Area的缩写。它是1024KB至1088KB之间的64KB内存,管为高端内存区,其地址为100000H~10FFEFH或以上,CPU在实地址模式下以Segment:OFFSET(段地址:偏移量)方式来寻址,其寻址的最大逻辑内存空间为(FFFF:FFFF),即10FFEFH。
4)EMB是英文Extended Memory Block(扩展内存块)的缩写,早期采用的扩充存储器(EPM)必须遵循EMS规范(如使用EMM386.exe),后来使用的扩展存储器(EXM)必须遵循XMS规范(如使用Himem.sys)。扩展内存是指1MB以上的内存空间,其地址是从100000H开始,连续不断向上扩展的内存,扩展内存取决于CPU的寻址能力。
文章三、常规内存函数函数名: malloc
功 能: 内存分配函数
用 法: void *malloc(unsigned size);
函数名: farmalloc
功 能: 从远堆中分配存储块
用 法: void far *farmalloc(unsigned long size);
函数名: calloc
功 能: 分配主存储器
用 法: void *calloc(size_t nelem, size_t elsize);
函数名: farcalloc
功 能: 从远堆栈中申请空间
用 法: void far *farcalloc( unsigned long units, unsigned ling unitsz );
函数名: realloc
功 能: 重新分配主存
用 法: void *realloc(void *ptr, unsigned newsize);
函数名: farrealloc
功 能: 调整远堆中的分配块
用 法: void far *farrealloc( void far *block, unsigned long newsize );
使用函数:memcpy(),memset(),memmove(),movedata()
函数名: memcpy
函数名: memset
函数名: memmove
函数名: movedata
释放函数:free(),farfree()
函数名: free
指针操作函数:MK_FP(),FP_OFF(),FP_SEG()
函数名: MK_FP
功 能: 设置一个远指针
用 法: void far *MK_FP(unsigned seg, unsigned off);
函数名: FP_OFF
功 能: 获取远地址偏移量
用 法: unsigned FP_OFF(void far *farptr);
函数名: FP_SEG
功 能: 获取远地址段值
用 法: unsigned FP_SEG(void far *farptr);
原文始发于微信公众号(汇编语言):c语言内存模型
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论