.exe文件可包含多个程序段,如:代码段,数据段,堆栈段等
.com文件只能作一些简单的DOS指唯顷前令 *** 作
.exe文件应用广泛,可作为各类程序的程序文件
.com文件大小不能超过64K
.exe文件大小没有限制
com文件. com文件是内存中数据的镜像, 在装载过程中 *** 作系统将分配一个64Kb的段(segment)
给它, 然后将PSP(程序段前缀, program segment prefix)结构的256个字节填充乎亩完毕,
再指清将文件读入0x100偏移地址处, 再设置所有的段寄存器到该段, 即SS DS ES与CS同.
在设置IP=0x100, 然后将控制权交给com文件.
一个com文件一般是由一条跳转指令(jmp xxyy, 指令码 E9 yy xx) 或是CALL指令(E8)开始的.
由于段的限制, com文件实际大小不超过 64K-256=65280个字节.
exe文件. exe文件是有格式的, 通常的exe文件都是以MZ或ZM为文件开头的.
最开始的0x20个字节是文件头的结构, 包括文件大小, 运行所需的空间, 程序开始指针(CS:IP),
重载定位表(Relocation Table)项数, 等等信息, 根据文件头的不同,
后续的内容可能会有所变化. 并且根据exe格式是MZ(DOS下的), NE(windows 3.1的),
LE(vxd等驱动程序)或PE(Win32)的不同, 文件结构又不相同.
总的来说, exe文件是以page为单位的, 一个page为16字节, 载入内存中的时候
将对exe进行重载定位, 一个exe程序的数据段和程序段是分开的, 并且可以有多个
不同的数据段, 程序段和堆栈段, 程序占有的内存空间也超过64K的限制.
该回答在8月23日 16:21由回答者修改过
/Zm指定编译器在编译时使用的堆空间。下面的情况可能需要消耗更多的编译器堆内存:1、包含了很多携李唤的头文件;
2、包含了过多的变量声明;
3、包含了过大的数组。
最常发生的情况是3,即程序中定义了一个很大的数组。估计一下数组的大小,参考下面列举的msdn资料,大致可以知道参数应该设为多少。
回答补充:
根据实际情况适当加大就扰裤可以,实在是内存紧张,可以采取二分法(找到一个满足要求的值和不满足要求的值,然后不断取中间值尝试),尽量接近实际要求的值即可。这个值不需要太精确,因为代码仍有可能改动,如果每次添加个数组什么的就要改动这个值辩凯就不划算了。
R='J:\B\za\rain.txt'//文件名fid=fopen(R,'r')//打开文件
Sta=fscanf(fid,'%s\n',1)//把目标文件内铅李容第一个字符按'%s\n'格式存入Sta中
nn=fscanf(fid,'%d\n',1)//第二个字符按'%d\n'存入nn中,估计是数据槐清迟长度
//估计以上是文件头信息
for i=1:nn //主要数据读入
sta(i).s=fscanf(fid,'%s',1)
zm(i).s=fscanf(fid,'%s\n',1)//之所以要加\n 是想存成列向量,下同
mm(i)=fscanf(fid,'%d\n',1)//像是Y(i).y的长度
Y(i).y=fscanf(fid,'正亮%f\n',mm(i))//此处mm(i)是一次存的数据长度
end
fclose(fid)//关文件
display('No. of Stations =')//显示此字符串
disp(nn)//显示数据总长度
n0=1//不知道是什么,没用到
没有文件格式,只有猜了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)