江城如画里 发表于 2014-1-2 03:43 ( m+ D F/ u3 u! L( b) e
关于堆栈的讨论:
我个人觉得原文说堆栈出问题影响到邻近内存区还是有可能的,我遇到过这样的情况,大概如 ...
冷启动:所有的数据(过程映象,位存储器、定时器和计数器)都被初始化,包括数据块均被重置为存储在装载存储器(Load memory)中的初始值,与这些数据是否被组态为可保持还是不可保持无关。首先执行启动组织块OB102。
暖启动:从程序开始处以系统数据和用户地址区的初始设置开始进行程序处理(非保持性定时器、计数器和位存储器复位)。保持的标志存储器、定时器和计数器以及数据块的当前值保持(仅当有后备电池)。OB100中的程序执行一次然后循环程序开始执行。
# i! {+ Q" A& a+ N7 E
热启动:在程序中断处重新开始执行程序(不复位定时器、计数器和位存储器)。在启动时所有数据(标志存储器、定时器、计数器、过程映像及数据块的当前值)被保持, OB101中的程序执行一次。然后程序从断点处(断电, CPU STOP) 恢复执行。
我看过很多来自不同行业、有不同背景的技术人员,在需要为自己的领域书写代码的时候,喜欢强调各自领域的特殊性或是复杂性,试图说明某些软工原则在此并不适用。但按照我的观察,那些说法很少成立,而且大多出自对软件工程的不理解。这里晨枫同学对全局变量的说法,算是一个典型的例子。
全局变量可以承载全局数据,但全局数据并不一定依赖于全局变量,没有全局变量一样可以获取全局数据。以C语言为例,可以定义一个结构(struct)涵盖全局数据区的所有数据,然后把这个结构的指针作为参数传递给子程序。如果数据真的很多很复杂,还可以考虑轻量级的in-memory数据库(不是所有的数据库都像Oracle、DB2那样巨无霸),保证酸味(ACID)纯正。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/) | Powered by Discuz! X3.2 |