阅读:1390回复:9
关于软件的稳定性问题!
到这个版来是因为这个版的人气旺!我的问题是关于VC++6软件的稳定性问题,与USB无关,希望版主见谅。
任务:32个文件并发读取,把数据组织起来,通过PCI卡输出。 硬件环境:1.7G赛扬4CPU、256M内存、自己设计的PCI卡。 软件环境:WIN2K专业版、自己开发的PCI驱动 软件开发平台:VC6.0 问题是这样的: 软件中,为32个文件共申请两组64M共128M缓冲,两组缓冲交替使用,一个用来读数据,另一个用来组织上次已读取的数据并输出。每次读文件时,所有文件各读2M,两次读操作间隔约12秒。 软件刚写完进行测试时,只使用了8个文件用来测试(即从每个文件中一次读8M数据,凑足应有的数据量),软件连续运行一周没发现任何问题。后来,将软件修改为对32个文件访问,结果总是在运行到4个小时左右时,出现错误。错误表现为程序中定义的CEVENT对象不存在,或者是CFILE对象不存在。 由于错误出现前后,只修改过访问文件的数据,因此,问题可能会出操作系统文件缓冲区方面呢?因为WINDOWS会占用一半的物理内存,软件又占用一半物理内存当作文件缓冲区,那么在读文件时,总是实际读取的数据量要大于读请求的量,同时访问32个文件,会不会因占用的内存过大而导致系统不稳定?可是,如果系统不稳定出的错误,又没道理总是出现在软件运行四个小时左右,又似乎很有规律! 请教诸位,谢谢。 |
|
|
沙发#
发布于:2003-06-10 12:50
版主大哥:
引用您的话: //////////////////////////////////////// 你开个buffer[10],向里面写1000 byte看看? memleak并不是只有一个现象。code被改变后的行为没有人可以预料! /////////////////////////////////////// 您说的这种情况是栈溢出,的确可能会改变CODE,导致错误,但这和内存泄漏是两码事情啊! |
|
|
板凳#
发布于:2003-06-10 10:59
另: 全局变量一定要保护,比如临界区(Critical Section )等等同步方式 |
|
|
地板#
发布于:2003-06-10 09:43
斑竹,请教如何定位哪里出现内存泄漏?我写了一个dll被vb程序调用,检测到内存泄漏,输出信息如下:
...... xxxxxx.DLL Terminating! etected memory leaks! Dumping objects -> {59} normal block at 0x08364668, 1 bytes long. Data: < > CD Object dump complete. ...... 怎么解读这个信息?谢谢 |
|
地下室#
发布于:2003-06-10 00:08
另: 共享资源当然应该用mutex互锁 |
|
|
5楼#
发布于:2003-06-10 00:06
谢谢版主。 你开个buffer[10],向里面写1000 byte看看? memleak并不是只有一个现象。code被改变后的行为没有人可以预料! |
|
|
6楼#
发布于:2003-06-06 22:44
大哥们,帮忙给看看呀!
|
|
|
7楼#
发布于:2003-06-03 00:59
另:
值注意的是软件采用的多线程结构。除了主线程外,还开了四个线程,分别是: 1、数据输出线程:调驱动,输出数据,并从驱动中获得硬件中断信息,同步其它线程的动作。 2、文件读取线程:通过在数据输出线程中置位的一个事件对象,触发执行32个文件的读操作。 3、数据整理线程:把读文件线程中获得的数据整理为适合输出的结构,并通过事件对象通知数据输出线程输出数据。 4、操作线程:从串口获得控制信息,以确定该输出什么文件。 这四个线程除了使用事件对象相互通信处,还使用了一些全局变量来表示状态,以及CString型对象来传递文件名。请问,不同线程访问同一个变量时,有没有可能发生冲突?会不会导致如前所述的故障。 谢谢。 |
|
|
8楼#
发布于:2003-06-03 00:50
谢谢版主。
内存泄漏将导致对内存资源占用的累积,其现象应该是系统变得迟缓而后直至死机。 可我遇到的情况并不是这样,首先,它的现象是定义的对象找不到,如果是内存泄漏,系统不会分配已分配的内存资源而使已存在的对象丢失;第二,故障现象是软件报错,告诉我某个内存地址不能访问,并没有死机。而且软件终止后重新运行,又完好如初。并不需要重新启动机器。 还请版主老兄给点建议,谢谢。 |
|
|
9楼#
发布于:2003-06-02 18:06
比较可能的原因:内存泄漏
|
|
|