在开发过程中,分配内存是家常便饭,然而其中也有很多“潜规则”需要注意。
linux栈内存不要超过10M,超过会使程序崩溃,而且还不容易发现。在做应用程序时经常遇到这种情况,大家不会吝惜内存分配,可能结构体套结构体,一会就把局部内存给分满了。对于这种情况,可以分配静态变量。但是最根本的还是按需分配,对于程序要使用的内存大小和结构设计要了如指掌。
如何让守护进程单例运行?
如果已经启动一个进程,再启动的进程要监控到已启动进程的状态,涉及到进程间通信。
如果是网络程序,可以不重用端口,发现已经绑定就不创建。
可以申请公共的共享内存,在共享内存中标记已经有进程启动,退出时标记回来。
但是上面的方法有问题,大家可以想一下。
常用的方法是建立一个进程文件,用文件锁锁住文件。再启动的进程发现文件锁住了,就不启动,保证进程单例运行。
为什么要单例运行?
防止两个进程使用统一资源,调度相同的逻辑引起混乱。例如crontab,两个一起调用会让任务重复执行。
** 什么是守护进程?**
守护进程(daemon)是运行在后台不属于任何终端的进程。服务类程序多为daemon进程:例如网络程序。而且多采用named的形式命名。
如何创建守护进程?
1.程序在后台执行。
fork()进程,然后父进程退出。新的子进程脱离命令行或shell程序的控制,在后台运行,并且不再是进程组组长,为下一步setsid做准备。
2.脱离控制终端,登录会话和进程组。
进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的PID。登录会话可以包含多个进程组。他们用一个控制终端,这个终端通常是创建进程的登录终端。
下面这段代码会产生warning
#include <iostream>
using namespace std;
struct foo
{
foo() : Y(1), X(Y+1) {}
int X;
int Y;
};
int main(int argc, char *argv[])
{
return 0;
}
在正规的项目中,会有pm、产品和开发等多种角色,项目的总体节奏基本上都是由pm来掌控的。在《如何在pm和de之间生存》的文章中也有所介绍,作为一名开发人员如何当好pm一职。今天说的不是这个,其实作为一名开发,在项目中也是要起带动作用的,也要有所发挥才能让项目更顺利。
转自http://www.cnblogs.com/jirigala/
眼看自己大学毕业后都快12年了,也快2个孩子的爸爸了,但是有时候还是会有不少不安全的感觉产生。都快奔35了,技术也过得去,收入其实也很稳定,但是偶尔还是会有迷茫的时候,最近有几个朋友,也发QQ聊天信息,同样有类似的感觉。也稍微揣摩了一下,为啥会有这样的感觉产生?
其实软件开发也是一个行业,当厨师的也是一个行业,一个厨师干了10多年后,会不会变成国家主席?很可能还是厨师,甚至有有可能一辈子都是厨师,软件开发人员也是一个行业而已,也是为人民服务而已,估计厨师也会有迷茫的时候,我们也照样会有迷茫的时候,05年左右在上海做日本外包时,还真有同事是厨师出身的。
makefile变量表示
在makefile中,表示一个变量要用$(VAR) ${VAR}两种都行,但是在shell中必须要用大括号。其实makefile要求用小括号,只是在shell中解析用哪个都行。如果在makefile中要解析shell变量,要使用$${PWD}才可以。
makefile赋值
最近的一个项目中使用到了xml文件,主要用来读取配置。对xml有了一些了解。为什么要用xml呢?数据的格式方便阅读,擅长做为有层级关系的配置文件。例如:一个系统有3个ip和端口。如果用传统的配置,则要写成ip1 xxx ip2 yyy ip3 zzz。如果加ip呢,如果每个ip都再添加一些属性呢?要用下标来标记,看起来不直观,写起来也麻烦。如果换成xml就会简单许多。
什么是XML?
XML 代表Extensible Markup Language(eXtensible Markup Language的缩写,意为可扩展的标记语言)。XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
XML 指可扩展标记语言(EXtensible Markup Language)