关于测试
来源:互联网 发布:淘宝卖家退货流程明细 编辑:程序博客网 时间:2024/04/28 09:01
实现 malloc() 和 free() 之后我进行了几个测试看它们是不是生效,但是总有些问题,我使用如下代码进行测试(putch2() 和 getch2() 是我之前实现的向屏幕输出字符的函数,经测试无误,malloc2() 是我的 malloc() 函数):
void t_main()
{
char* q/*=(char*)malloc2(1000)*/;
//Here I turn off the memory management firstly and turn on secondly
q[10]='a';
putch2(q[10]);
getch2();getch2();
}
{
char* q/*=(char*)malloc2(1000)*/;
//Here I turn off the memory management firstly and turn on secondly
q[10]='a';
putch2(q[10]);
getch2();getch2();
}
首先,我关闭内存分配然后另 q[10] 的值为字符 a,随后打印到标准输出,然而奇怪的事情发生了,这个对照试验奇迹般的成功了,但是,依照在 VC++ 和 Sun Studio 的经验,这个应该是 Core Dump! 于是我想去将它移植到 VC++ 上,于是我重起到 Vista 并在 VS8 中调试,先是出现 'Error C2443 寄存器大小与操作数不符',我用 sizeof 查看 VC++ 的 int 类型大小,是 4 字节 32 位,难怪不符,使用 WORD PTR 伪指令限制,编译通过了但是问题又来了,运行时提示运行时错误,错误语句直指中断,郁闷,XP 还支持的中断到了 Vista 下却不支持了,还给不给系统层面一点活路了,为了提高安全层面将保护做到了这样的地步,唉,又翻回去启动虚拟机,想移植到 Solaris 上,但可恨的是,问题总是出现,GCC 用的居然是 AT&T 汇编,可我用的是 Intel 处理器啊?!没天理了,去语法转换吧,真找到了,一看就晕菜了,目的操作数和源操作数跟 Intel 汇编是反的!而且伪指令也不同!一气之下不用了,此时深感保护模式和实模式的不同,后来想想,汇编里有这样的规则:在汇编里声明一个数组,当越界时是没有错误提示的,只不过是顺延着往后写数据。原来如此,有可能是这个原因,于是我想用 WinHEX 打开 VM 的内存看看,很不幸,它是锁着的,但难不倒我,我打开整个驱动器,找到那个文件,就不锁了,但是我顺着内存找了一圈没发现什么,于是我决定作下一个试验来验证我的想法和函数。我使用更大的指针来测试,这回我把数组假设为了1000字节,我的程序很小,只有 150 字节,如果在没有内存分配机制的独立环境下运行我的程序,并且我的想法是正确的,我的程序应该很苦恼,因为它原则上是不能超越变量地址到程序结尾处这样一段空间的,所以它会最终因无法分配足够空间而崩溃,至于结果不是运行错误就是死循环,于是,我用如下代码测试:
void t_main()
{
char* q/*=(char*)malloc2(1000)*/;
//Here I turn off the memory management firstly and turn on secondly
int i=1;
for(;i<1000;i++)
q[i]=(i%26)+96;
putch2(q[999]);
getch2();getch2();
}
{
char* q/*=(char*)malloc2(1000)*/;
//Here I turn off the memory management firstly and turn on secondly
int i=1;
for(;i<1000;i++)
q[i]=(i%26)+96;
putch2(q[999]);
getch2();getch2();
}
我首先使用无内存分配的程序段进行测试,虚拟机死机,表示我的猜想是正确的,然后我用我的函数进行内存分配,程序达到了预期结果!说明我的函数生效了。
- 关于测试
- 关于测试
- 关于测试
- 关于测试
- 关于测试
- 关于测试
- 关于测试
- 关于测试
- 关于测试
- 关于测试
- 关于测试
- 关于测试
- 关于测试
- 关于测试与测试工具~
- 关于测试与测试工具~
- 关于白盒测试测试
- 关于集成测试 系统测试
- 关于测试和测试人员
- 初恋的二十五个瞬间
- Fedora 7和Ubuntu 7的结合(二配置篇)
- .NET Compact Framework使用P/Invoke服务
- Sun CDC based JRE framework
- GPLv3:大教堂和集市的新一轮对抗
- 关于测试
- 第一次接触项目管理
- 四书之《论语》学习日记18
- (转载)asp.net中“sender as object,e as EventArgs”的相关解释
- Platform Builder实践之运行环境
- 用Python恢复损坏的.wav文件
- Platform Builder实践之编译
- Platform Builder实践之配置文件
- 直觉还是错觉? 从一个UTF16-GB2312转化算法谈研究算法空间与时间复杂度的必要性。