w*********g 发帖数: 30882 | 1 丰田一绝 - 28万行代码竟有1万多全局变量,庞大的bug培养基地
来源: 日理万机 于 2013-11-07 05:22:57 [档案] [博客] [旧帖] [给我悄悄话] 本文
已被阅读:249次 字体:调大/调小/重置 | 加入书签 | 打印 | 所有跟帖 | 加跟贴 |
查看当前最热讨论主题
More Sharing Services
转贴自:http://club.tgfcer.com/thread-6817371-1-1.html 网友Kuzuryuusen的文章
抗日的理论基础 -事后诸葛-
----------------------------
【第一部分】背景简介
前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展。十月底俄克拉荷马的一次庭审
,2007年一辆2005年凯美瑞暴冲(Unintended Acceleration,UA)致一死一伤事件中
丰田被判有责。引起广泛关注的是庭审中主要证人Michael Barr的证词让陪审团同意丰
田的动力系统软件存在巨大漏洞可能导致此类事件。这是丰田在同类事件中第一次被判
有责。庭审过后丰田马上同意支付300万美元进入调解程... 阅读全帖 |
|
b***i 发帖数: 3043 | 2 我的一点想法,
C语言中函数内部static, 就是把变量放在静态数据区,auto则放在栈上。
然后,全局变量也放在静态数据区,才能被所有函数访问。
我就想,这个也在静态数据区,static就是静态的意思,为什么全局变量不用static声
明。而是规定static 只能在本文件内部访问?一个static 两个用法,是不是多此一举?
都是不相同的实例。所以如果你头文件里声明static变量,然后两个源文件又给出该变
量不同的定义,则,两个源文件自己用自己的变量,相互独立。所以不建议这样做。 |
|
b***i 发帖数: 3043 | 3 定义全局变量,是不是,main 可以使用,同一个文件内的函数也可以使用?
那么,这样的变量不写static是自动算static,还是auto? 编译器是怎么搞定全局变量
访问的? |
|
b***i 发帖数: 3043 | 4 简单程序可以直接extern,也可以包在namespace里面。
很多情况下你并不需要绝对的全局变量,而只是想获取其他程序里面的值。你可以把
function变成一个class里面的function,就可以在任何地方访问这个函数。class里面
可以用static变量。
myclass.h
class myclass{
public: static updateValue(){value = myFun()};
static int value;
whatever myFun(){};//static, private, it can even be moved outside
myclass
};
myclass.cpp
int myclass::value=0;
main里面
#include "myclass.h"
myclass::updateValue()
其他cpp
#include "myclass.h"
直接用myclass::value
myclass中的value就相当于一个全局变量。你的程序复杂了之后,很多function都会在
... 阅读全帖 |
|
b***i 发帖数: 3043 | 5 如何在多个文件中简单的定义一个全局变量呢?
这样:在main.h里面定义
#ifdef MAIN
#define extern
#endif
extern int timer_tick;
这样,main.c里面
#define MAIN
#include "main.h"
就定义了全局变量,而其他的文件用main.h就自动用了extern int timer_tick;而main
.c里面看到的没有extern. |
|
b***i 发帖数: 3043 | 6 是的
全局变量应该在main里面定义,不用extern,在其他需要用全局变量的文件里面用
extern,这样很麻烦,所以直接#include "main.h"不就行了? |
|
b***i 发帖数: 3043 | 7 为什么你觉得你更简单?如果你有100个全局变量,经常修改类型,你要在多个文件中使
用就要经常修改。如果#include "main.h"一行就可以解决,这才是简单吧。
1 main.c
#define MAIN
#include "main.h"
2 main.h
用#ifdef MAIN来定义extern为空
然后定义所有extern int ...; extern char...
3 所有其他的文件如果要使用全局变量
#include "main.h" |
|
M**u 发帖数: 10158 | 8 有一个全局变量flag,初始化为0
然后线程A写这个变量flag=1
另外一个线程B不停地读这个变量
while (flag != 1)
sleep (5); //waiting for flag to set as 1
thread_B_do_real_thing_with_flag_1 ();
没有别的线程操作这个flag,请问这种情况下,需要加锁么?
我感觉pthread_cond_wait做这个更好一点 |
|
m**s 发帖数: 97 | 9 "而其他的文件用main.h就自动用了extern int timer_tick;"
你这里的第一个“用”= #include?
我觉得“简单的定义一个全局变量”应该是只定义一次,不需要其他include,就已经
是全局了。
main |
|
d***a 发帖数: 13752 | 10 不会吧,我改过Linux内核呢。
少用或不用全局变量,这是基本的编程注意事项。适当用可以, 但一个文件里用100个
,太过了。
其实你说的方法有一个很大的问题,遇到变量初始化就无法应对了。
main.h:
external int table_size;
main.c:
int table_size = 1024; /* initial table size is 1024 */ |
|
c***k 发帖数: 1589 | 11 如果真是全局变量,整个namespace里都可以访问,不写static就不是static,别的文件
如果在一个编译单位里也可以访问。
编译器搞定它很简单啊,只要这个symbol出现在symbol table里就不会认为是非法了。
楼主找两本基本的编译和链接的书看看吧 |
|
d***a 发帖数: 13752 | 12 一个用了100个全局变量的程序,得打回去重写! :) |
|
f******n 发帖数: 198 | 13 既然是全局变量,为什么不把它们定义在一个叫Globals.h的文件里?就用你现在的方
法,但是不放在Main.h里,而是放在Globals.h里。文件名一目了然,也不会有Main.h
里不能用extern的问题。 |
|
b***i 发帖数: 3043 | 14 全局变量统一放在一个文件中才是好的设计。分散开来改起来才容易错。
review |
|
g****t 发帖数: 31659 | 15 numpy大的数组放在函数内初始化好,
还是直接全局变量好?纯以速度而论的话?
我基本遵从如下模糊认识:
更早 告诉解释器/编译器 更多的信息,速度会快一些。
这样对不对? |
|
|
w***g 发帖数: 5958 | 17 不知道静态变量和全局变量的地方是不是叫heap,但是静态变量和全局变量大小固定,
不存在内存管理问题。也可以理解这些固定的东西在heap底部。动态分配的内存是放在
heap中的。 |
|
z****e 发帖数: 2024 | 18 global != static
对,global变量, main 可以使用,同一个文件内的函数也可以使用.
其他源文件,如果想使用这个global,就 extern 声明一下,然后链接的时候把该
global 所在目标文件连上。
static就只能在当前编译单元,也就是当前源文件使用,其他源文件调用的同名变量都是不相同的实例。所以如果你头文件里声明static变量,然后两个源文件又给出该变量不同的定义,则,两个源文件自己用自己的变量,相互独立。所以不建议这样做。 |
|
w*******e 发帖数: 285 | 19 我的理解是function内部的变量都进stack,普通function执行完了就被清除,静态函数
的变量一直在stack里面直到程序终结。heap是放静态变量和全局变量的地方,动态分
配的内存也放在stack当中,如果不release就会有泄漏,直到程序终结。
请问这是对的吗? |
|
b***i 发帖数: 3043 | 20 为啥不行?
我看很多项目都是这样,比如一个文件系统,里面全局的变量多了。 |
|
z****e 发帖数: 2024 | 21 OK! OK!
let's type................
static 的一个重要应用是internal linkage.
而C++ 引入 namespace, 其实有一个原因就是可以来替代static fun,或者static
variable。这种internal linkage就被namespace的作用域给实现了。
你的疑惑可能是以上的东东。
但是static 还远远不止这个作用。
考虑 static member fun, static member data
static member fun 是不需要实例化对象就可以调用的,其实是用类名,作为了
namespace。(注意,static member fun不可作为virtual, 因为无有this,故而也无法访问non-static member)
static member data 对于任意一个类,只有一个实现,这就保证了,既封装了数据,又保留了数据copy的全局唯一性。这一点,是global 无法实现的。
同理,static data in a function, 一样只有一个全局实现,但是其作用域只在 |
|
k****e 发帖数: 100 | 22 同一个变量,printf 居然给一个非零,一个nan
难道是gcc 4 的bug ?
难以理解啊
程序是前辈改自FORTRAN,到处是全局变量,数组一会儿从0一会儿从1开始,但没想到p
rintf 还给这么个答案。
哪位有经验的?
代码
printf("First: %e\n", g_NAFVariable.TFS[0]);
printf("First: %e\n", g_NAFVariable.TFS[1]);
printf("First: %e\n", g_NAFVariable.TFS[2]);
printf("First: %e\n", g_NAFVariable.TFS[3]);
for (iCpt = 1; iCpt <= g_NAFVariable.NFS; iCpt++)
{
printf("AMPL: ", iCpt);
printf(" %f+%f abs=%f arg(AMPL)=%f FREQ=%f\n",
g_NAFVariable.ZAMP[iCpt].reel |
|
a****l 发帖数: 8211 | 23 我说的方法和楼主说的有任何区别吗?对于编译器来说是完全一样的。区别仅在于,我
是用实在的表达告诉用户变量的存在方式,楼主是用一种技巧让用户觉得变量神奇的存
在了。 |
|
s****y 发帖数: 983 | 24 函数外的都是全局变量,无需传递即可在其它js中直接调用 |
|
k****e 发帖数: 100 | 25 第一个 First 输出忽略,因为我没有把相应的代码考上。
g_NAFVariable 是全局变量,struct
ZFT,ZAMP 是动态分配的数组。
TFS 是double,动态分配数组 |
|
s******e 发帖数: 431 | 26 << T2:第一个线程打印i,i的值应该是3,然后两个线程退出foo(),
应该打印5. 你可以想象static 相当于全局变量。 |
|
d*********8 发帖数: 2192 | 27 面试时切忌只回答答案。最重要的是你的理由。即使答案错了,理由讲清楚了,表明自
己概念清楚,也不会明显失分。
首先表明态度,绝对不应该在要求THREAD SAFE的函数里写这样的代码。
然后说应该有LOCK,以及VOLATILE声明。
第三说,最好是用全局变量,这样别人调用的时候知道会有锁,会更加小心。
至于最后的答案。由于没有volatile编译器如果做了优化的话,T2打印3是有可能的。
因为还在CPU CACHE里。
如果楼主坚持打印3是错误的,表明不理解volatile,FAIL也正常。 |
|
b***i 发帖数: 3043 | 28 实在需要可以放在前面,后面#include "main.h"
一般main不直接使用其他文件的变量,而是反过来 |
|
b***i 发帖数: 3043 | 29 可以的。意思其实一样,都是操纵extern,使得main.c里面不extern,其他任何使用这
些变量的都extern
h |
|
b****r 发帖数: 6 | 30 在simulink里面用自定义的函数,可以使用全局变量
个
没 |
|
n**********2 发帖数: 648 | 31 【 以下文字转载自 Programming 讨论区 】
发信人: xykkkk (asdf), 信区: Programming
标 题: 老码农冒死揭开行业黑幕:如何编写无法维护的代码(zz)
发信站: BBS 未名空间站 (Fri Nov 28 13:28:27 2014, 美东)
如何编写无法维护的代码
让自己稳拿铁饭碗 ;-)
– Roedy Green(翻译版略有删节)
简介
永远不要(把自己遇到的问题)归因于(他人的)恶意,这恰恰说明了(你自己的)无
能。 — 拿破仑
为了造福大众,在Java编程领域创造就业机会,兄弟我在此传授大师们的秘籍。这些大
师写的代码极其难以维护,后继者就是想对它做最简单的修改都需要花上数年时间。而
且,如果你能对照秘籍潜心修炼,你甚至可以给自己弄个铁饭碗,因为除了你之外,没
人能维护你写的代码。再而且,如果你能练就秘籍中的全部招式,那么连你自己都无法
维护你的代码了!
(伯乐在线配图)
你不想练功过度走火入魔吧。那就不要让你的代码一眼看去就完全无法维护,只要它实
质上是那样就行了。否则,你的代码就有被重写或重构的风险!
总体原则
Quidquid... 阅读全帖 |
|
x****k 发帖数: 2932 | 32 如何编写无法维护的代码
让自己稳拿铁饭碗 ;-)
– Roedy Green(翻译版略有删节)
简介
永远不要(把自己遇到的问题)归因于(他人的)恶意,这恰恰说明了(你自己的)无
能。 — 拿破仑
为了造福大众,在Java编程领域创造就业机会,兄弟我在此传授大师们的秘籍。这些大
师写的代码极其难以维护,后继者就是想对它做最简单的修改都需要花上数年时间。而
且,如果你能对照秘籍潜心修炼,你甚至可以给自己弄个铁饭碗,因为除了你之外,没
人能维护你写的代码。再而且,如果你能练就秘籍中的全部招式,那么连你自己都无法
维护你的代码了!
(伯乐在线配图)
你不想练功过度走火入魔吧。那就不要让你的代码一眼看去就完全无法维护,只要它实
质上是那样就行了。否则,你的代码就有被重写或重构的风险!
总体原则
Quidquid latine dictum sit, altum sonatur.
(随便用拉丁文写点啥都会显得高大上。)
想挫败维护代码的程序员,你必须先明白他的思维方式。他接手了你的庞大程序,没有
时间把它全部读一遍,更别说理解它了。他无非是想快速找到修改代码的位置、改代码
、编译,然后就能交差,... 阅读全帖 |
|
j*********n 发帖数: 6034 | 33 【 以下文字转载自 Auto_Fans 俱乐部 】
发信人: andrews (旱鸭子), 信区: Auto_Fans
标 题: 丰田工程师真的该枪毙啊
发信站: BBS 未名空间站 (Sun Nov 3 00:14:23 2013, 美东)
看下面的这文章,我是无语了……
以前不知道什么是"在看不到的地方偷工减料", 这回见识了。 以后不敢买丰田车了
转贴自:http://club.tgfcer.com/thread-6817371-1-1.html 网友Kuzuryuusen的文章
----------------------------
【第一部分】背景简介
前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展。十月底俄克拉荷马的一次庭审
,2007年一辆2005年凯美瑞暴冲(Unintended Acceleration,UA)致一死一伤事件中
丰田被判有责。引起广泛关注的是庭审中主要证人Michael Barr的证词让陪审团同意丰
田的动力系统软件存在巨大漏洞可能导致此类事件。这是丰田在同类事件中第一次被判
有责。庭审过后丰田马上同意支付300万美元进入调解程序。
出于好奇,... 阅读全帖 |
|
y******e 发帖数: 1194 | 34 冷静,我有存档,你整理一下格式再发吧
————————————————————————————
背景简介
前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展。十月底俄克拉荷马的一次庭审
,2007 年一辆 2005 年凯美瑞暴冲(Unintended Acceleration,UA)致一死一伤事件
中丰田被判有责。引起广泛关注的是庭审中主要证人 Michael Barr 的证词让陪审团同
意丰田的动力系统软件存在巨大漏洞可能导致此类事件。这是丰田在同类事件中第一次
被判有责。庭审过后丰田马上同意支付 300 万美元进入调解程序。
出于好奇,我漫不经心地下载了 Barr 的 286 页证词,却一下子被吸引住了。几天内
读完,算是对这次事件进行了一次深入了解。下面就从外行角度总结一下这份证词并尝
试以更简单的语言解释里面提到的暴冲原因以及丰田犯下的错误。
Barr 的证词下载自他的个人博客 Barr Code,但现在该文已经被删除。(附在文末)
Michael Barr 是谁?他是一位拥有 20 年以上行业经验的嵌入式系统工程师。在十八
个月中,有 12 位嵌入式系统专家,包 Barr,受原... 阅读全帖 |
|
y******e 发帖数: 1194 | 35 冷静,我有存档,你整理一下格式再发吧
————————————————————————————
背景简介
前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展。十月底俄克拉荷马的一次庭审
,2007 年一辆 2005 年凯美瑞暴冲(Unintended Acceleration,UA)致一死一伤事件
中丰田被判有责。引起广泛关注的是庭审中主要证人 Michael Barr 的证词让陪审团同
意丰田的动力系统软件存在巨大漏洞可能导致此类事件。这是丰田在同类事件中第一次
被判有责。庭审过后丰田马上同意支付 300 万美元进入调解程序。
出于好奇,我漫不经心地下载了 Barr 的 286 页证词,却一下子被吸引住了。几天内
读完,算是对这次事件进行了一次深入了解。下面就从外行角度总结一下这份证词并尝
试以更简单的语言解释里面提到的暴冲原因以及丰田犯下的错误。
Barr 的证词下载自他的个人博客 Barr Code,但现在该文已经被删除。(附在文末)
Michael Barr 是谁?他是一位拥有 20 年以上行业经验的嵌入式系统工程师。在十八
个月中,有 12 位嵌入式系统专家,包 Barr,受原... 阅读全帖 |
|
e*******s 发帖数: 1979 | 36 【 以下文字转载自 Automobile 讨论区 】
发信人: jamesgordon (高登大爷), 信区: Automobile
标 题: 丰田工程师真的该枪毙啊 (转载)
发信站: BBS 未名空间站 (Sun Nov 3 21:23:20 2013, 美东)
【 以下文字转载自 Auto_Fans 俱乐部 】
发信人: andrews (旱鸭子), 信区: Auto_Fans
标 题: 丰田工程师真的该枪毙啊
发信站: BBS 未名空间站 (Sun Nov 3 00:14:23 2013, 美东)
看下面的这文章,我是无语了……
以前不知道什么是"在看不到的地方偷工减料", 这回见识了。 以后不敢买丰田车了
转贴自:http://club.tgfcer.com/thread-6817371-1-1.html 网友Kuzuryuusen的文章
----------------------------
【第一部分】背景简介
前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展。十月底俄克拉荷马的一次庭审
,2007年一辆2005年凯美瑞暴冲(Unintended Acceler... 阅读全帖 |
|
l**n 发帖数: 7272 | 37 【 以下文字转载自 Automobile 讨论区 】
发信人: jamesgordon (高登大爷), 信区: Automobile
标 题: 丰田工程师真的该枪毙啊 (转载)
发信站: BBS 未名空间站 (Sun Nov 3 21:23:20 2013, 美东)
【 以下文字转载自 Auto_Fans 俱乐部 】
发信人: andrews (旱鸭子), 信区: Auto_Fans
标 题: 丰田工程师真的该枪毙啊
发信站: BBS 未名空间站 (Sun Nov 3 00:14:23 2013, 美东)
看下面的这文章,我是无语了……
以前不知道什么是"在看不到的地方偷工减料", 这回见识了。 以后不敢买丰田车了
转贴自:http://club.tgfcer.com/thread-6817371-1-1.html 网友Kuzuryuusen的文章
----------------------------
【第一部分】背景简介
前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展。十月底俄克拉荷马的一次庭审
,2007年一辆2005年凯美瑞暴冲(Unintended Acceler... 阅读全帖 |
|
l**n 发帖数: 7272 | 38 【 以下文字转载自 Automobile 讨论区 】
发信人: jamesgordon (高登大爷), 信区: Automobile
标 题: 丰田工程师真的该枪毙啊 (转载)
发信站: BBS 未名空间站 (Sun Nov 3 21:23:20 2013, 美东)
【 以下文字转载自 Auto_Fans 俱乐部 】
发信人: andrews (旱鸭子), 信区: Auto_Fans
标 题: 丰田工程师真的该枪毙啊
发信站: BBS 未名空间站 (Sun Nov 3 00:14:23 2013, 美东)
看下面的这文章,我是无语了……
以前不知道什么是"在看不到的地方偷工减料", 这回见识了。 以后不敢买丰田车了
转贴自:http://club.tgfcer.com/thread-6817371-1-1.html 网友Kuzuryuusen的文章
----------------------------
【第一部分】背景简介
前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展。十月底俄克拉荷马的一次庭审
,2007年一辆2005年凯美瑞暴冲(Unintended Acceler... 阅读全帖 |
|
h*********n 发帖数: 11319 | 39 【 以下文字转载自 Automobile 讨论区 】
发信人: jamesgordon (高登大爷), 信区: Automobile
标 题: 丰田工程师真的该枪毙啊 (转载)
发信站: BBS 未名空间站 (Sun Nov 3 21:23:20 2013, 美东)
【 以下文字转载自 Auto_Fans 俱乐部 】
发信人: andrews (旱鸭子), 信区: Auto_Fans
标 题: 丰田工程师真的该枪毙啊
发信站: BBS 未名空间站 (Sun Nov 3 00:14:23 2013, 美东)
看下面的这文章,我是无语了……
以前不知道什么是"在看不到的地方偷工减料", 这回见识了。 以后不敢买丰田车了
转贴自:http://club.tgfcer.com/thread-6817371-1-1.html 网友Kuzuryuusen的文章
----------------------------
【第一部分】背景简介
前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展。十月底俄克拉荷马的一次庭审
,2007年一辆2005年凯美瑞暴冲(Unintended Acceler... 阅读全帖 |
|
a*****s 发帖数: 6260 | 40 看下面的这文章,我是无语了……
以前不知道什么是"在看不到的地方偷工减料", 这回见识了。 以后不敢买丰田车了
转贴自:http://club.tgfcer.com/thread-6817371-1-1.html 网友Kuzuryuusen的文章
----------------------------
【第一部分】背景简介
前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展。十月底俄克拉荷马的一次庭审
,2007年一辆2005年凯美瑞暴冲(Unintended Acceleration,UA)致一死一伤事件中
丰田被判有责。引起广泛关注的是庭审中主要证人Michael Barr的证词让陪审团同意丰
田的动力系统软件存在巨大漏洞可能导致此类事件。这是丰田在同类事件中第一次被判
有责。庭审过后丰田马上同意支付300万美元进入调解程序。
出于好奇,我漫不经心地下载了Barr的286页证词,却一下子被吸引住了。几天内读完
,算是对这次事件进行了一次深入了解。下面就从外行角度总结一下这份证词并尝试以
更简单的语言解释里面提到的暴冲原因以及丰田犯下的错误。
Barr的证词下载自他的个人博客Barr... 阅读全帖 |
|
w******1 发帖数: 520 | 41 一.在c中分为这几个存储区
1.栈 - 有编译器自动分配释放
2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量
和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的>另一块
区域。- 程序结束释放
4.另外还有一个专门放常量的地方。 - 程序结束释放
二.在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和
常量存储区。
1.栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储
区。里面的变量通常是局部变量、函数参数等。
2.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序
去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程>序结束
后,操作系统会自动回收。
3.自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是
用free来结束自己的生命的。
|
|
d**e 发帖数: 6098 | 42 ☆─────────────────────────────────────☆
peking2 (scala) 于 (Tue Mar 19 14:28:11 2013, 美东) 提到:
1. System design 是一个很大的话题,大的System一般都是由Architect来设计的,因
此就算工作过若干年的也未必有很丰富的system design的经验。如果想对system
design有一个初步了解,我发现这个文章不错,http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/。
2. 因为我们jobhunting的主要目标集中在了FLGT等互联网公司,因此在这个范畴里的
system design也就集中在了分布式计算和分布式存储的design上了。想对这些设计理
念有个大体的了解可以读读Google的三驾马车,GFS, MapReduce和BigTable。
3. 有大牛建议读读各个公司的engineering blogs,我觉得是非常好的建议。不但能学
习system des... 阅读全帖 |
|
i*****e 发帖数: 113 | 43 可以取址
类静态变量相当于类作用域的全局变量
函数静态变量相当于函数作用域的全局变量
文件静态变量相当于文件作用域的全局变量
多线程是主要问题
我有个模模糊糊的印象对于static variable,是不可以取地址的,这可能是它的
disadvantage
(不是很确定,希望有人可以查证)
什么时候用静态变量:如果这个类中这个变量只允许出现一份,比如reference count
这种情况
为什么不用静态变量:multi-thread确实是一个问题
还有一个例子我不知道算不算,我觉得可以不算,但是这种情况可以当你学习静态变量
时候的另外一种
思考方式,如果基类中定义了静态变量,子类继承了该基类,那么该静态变量只存在一
份,在这种情况
下,使用静态变量就要注意了,我举个例子
比如我有三个类
TPerson is the base class.
TStudent and TTeacher are derived class. In TPerson, we have a static
memember, named count. In this case, all three classe |
|
l********8 发帖数: 91 | 44 static key word: what is static in front of a function declaration? what is
static key word for a variable inside a function definition? what is static
keyword for a var outside a function definition.
对于变量而言,static的变量是放在静态存储区的(跟全局变量放在一起的),但是不
具备全局可见性,也就是只能在申明的函数中才能看到。
对于函数而言,static申明的函数没有全局可见性。
what is the difference pass by value or pass by reference. when to use them?
一般通过变量以及宏定义来进行数据的传递是为了方便调试。因为在调试时候,一个经
常用到的数据如果要进行修改的话只需要在宏定义或者变量申明的地方改一下就可以了。
what is const and volatile keywords for?
关键词cons... 阅读全帖 |
|
l********8 发帖数: 91 | 45 static key word: what is static in front of a function declaration? what is
static key word for a variable inside a function definition? what is static
keyword for a var outside a function definition.
对于变量而言,static的变量是放在静态存储区的(跟全局变量放在一起的),但是不
具备全局可见性,也就是只能在申明的函数中才能看到。
对于函数而言,static申明的函数没有全局可见性。
what is the difference pass by value or pass by reference. when to use them?
一般通过变量以及宏定义来进行数据的传递是为了方便调试。因为在调试时候,一个经
常用到的数据如果要进行修改的话只需要在宏定义或者变量申明的地方改一下就可以了。
what is const and volatile keywords for?
关键词cons... 阅读全帖 |
|
a****l 发帖数: 8211 | 46 其实使用全局变量没有什么大不了的.从根本上说,任何变量最后总要放一个地方,不是
全局的静态变量,就是局部的动态变量跳来跳去,更加难以检测.对这种高可靠性要求的
系统来说,使用全局静态变量避免动态内存分配的各种drama也是不错的选择.
其实关键问题是码工笨没有责任心,全局变量用的正确一样没有任何问题,关键是有大批
的低素质码工在那里瞎搞,所以系统设计师才想出各种高级的方法限制这些人的胡作非
为.简单的说,就是人笨/懒怪刀钝.
不要说什么日本人精工细作了,我们最近是吃够日本人的苦头了.简单的运一个机器,就
是不在箱子里面塞好固定,结果一路上运过来就撞坏了,还得运回去翻修,还要我们出钱,
什么世道阿.小日本居然还不买运输的保险,什么人啊,不负责的到极点了.中国随便什么
山寨厂最次也不过如此吧?
metric,
The
Barr
make |
|
a****l 发帖数: 8211 | 47 其实使用全局变量没有什么大不了的.从根本上说,任何变量最后总要放一个地方,不是
全局的静态变量,就是局部的动态变量跳来跳去,更加难以检测.对这种高可靠性要求的
系统来说,使用全局静态变量避免动态内存分配的各种drama也是不错的选择.
其实关键问题是码工笨没有责任心,全局变量用的正确一样没有任何问题,关键是有大批
的低素质码工在那里瞎搞,所以系统设计师才想出各种高级的方法限制这些人的胡作非
为.简单的说,就是人笨/懒怪刀钝.
不要说什么日本人精工细作了,我们最近是吃够日本人的苦头了.简单的运一个机器,就
是不在箱子里面塞好固定,结果一路上运过来就撞坏了,还得运回去翻修,还要我们出钱,
什么世道阿.小日本居然还不买运输的保险,什么人啊,不负责的到极点了.中国随便什么
山寨厂最次也不过如此吧?
metric,
The
Barr
make |
|
a****a 发帖数: 5763 | 48 http://bbs.weiphone.com/read.php?tid=507486
Mac OS X 10.6即所谓的Snow Leopard操作系统已正式发售。一如既往,Apple产品光
鲜的外表下凝聚了太多艰辛的劳作。ArsTechnic的John Siracusa以其独特的、专业的
、全面的视角深入翔实地体验这款最新的操作系统。
Weiphone.com将对该综述进行翻译整理并独家连载。欢迎关注
2009年底,Apple为新上市的Snow Leopard推出了C语言扩展,称之为“block
”。 Block为C语言以及源于C语言的C++、Objective-C和Objective C++增添了闭包(
closure)以及匿名函数功能。这些功能已在动态程序语言(dynamic programming
language)上应用了很长的时间,诸如Lisp、Smalltalk、Perl、Python、Ruby甚至
JavaScript。尽管使用动态语言的程序员早已对闭包(closure)和匿名函数习以为常,
然而对使用更为传统的静态编译语言(譬... 阅读全帖 |
|
r**h 发帖数: 1288 | 49 我当时考虑过一种类似的。比如说搞一个全局变量外加计数器。每个slave actor有结
果之后就去更新那个全局变量和计数器。当计数器的数量和actor的数量相等的时候,
就说明所有更新已经完毕,每个actor再来读取一次这个变量的值。读取一次计数器减1
,直到减成0,。最后一个actor负责将全局变量清零用于下一轮计算。
不过这种做法的实现挺困难。首先actor之间应该不能用monitor之类的东西搞
conditional block?(否则和actor自治系统设计思路就不符合了?)然后就变得每个
actor要不断访问这个计数器检查是否已经reduce完毕,反而使得开销很大。其次第一
个actor读取全局变量并更新计数器之前还要保证每个actor都已经发现计数器已经达到
预定的值,这个又要额外的代码来实现这个功能。相比之下还是用一个master actor来
维护这些所有工序更加直接。
后来看别人的实现,发现MPI里面一个reduce函数就可以做到这些,不知道后台是怎么
操作的。。。 |
|
f*******e 发帖数: 10 | 50 对于1, 感觉最好把dictionary作为函数变量传入,避免使用全局变量,你的意图会更
清晰一些。当然如果是在一个类内情况就不一样了,或者你把一个module当作一个类,
dict_a是其中的一个全局变量也可以像你的方式那样修改全局变量(即使那样,也需要
加一句global dict_a才能修改全局变量吧?)
def change(d):
d['key'] = 2
return d #you might comment this line
dict_a = change(dict_a)
fly |
|