内存管理内幕[转]

七月 19th, 2010. c

原文:http://www.ibm.com/developerworks/cn/linux/l-memory/index.html
级别: 初级
Jonathan Bartlett (johnnyb@eskimo.com), 技术总监, New Media Worx
2004 年 11 月 29 日
本文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存, 以及如何使用垃圾收集自动管理内存。
为什么必须管理内存
内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与 局限性至关重要。在大部分系统语言中,比如 C 和 C++,您必须进行内存管理。本文将介绍手工的、 半手工的以及自动的内存管理实践的基本概念。
追溯到在 Apple II 上进行汇编语言编程的时代,那时内存管理还不是个大问题。您实际上在运行整个系统。系统有 多少内存,您就有多少内存。您甚至不必费心思去弄明白它有多少内存,因为每一台机器的内存数量都相同。 所以,如果内存需要非常固定,那么您只需要选择一个内存范围并使用它即可。

Read the rest of this entry »

用lua作c的配置脚本

七月 12th, 2010. lua

高效调用lua函数
通常调用一个lua函数需要以下步骤

//1.解析函数名,将lua函数压栈
findLuaItem( “a.b.c.func” );
//2.参数压栈
lua_push()
//3.函数调用
lua_call()
最慢的是第一步解析函数名、反复查表的过程,这个过程会消耗不少时间和空间。
如果可以避开这个过程,就能提升效率。

函数总有函数指针,就算lua函数没有,也该有个handler吧。这个想法在LuaBind中得到了确认,他用一个int做lua函数的句柄。
接下来看了看lua SDK,没有发现返回lua函数句柄的API,于是想到了这个点子:用一个表保存需要调用的lua函数,表的key就是lua函数的句柄。
CustomTable[ handler ] = a.b.c.func

在C中访问lua的表,需要表索引。当时想到的只有LUA_GLOBALSINDEX,后来从同学那知道还有LUA_ENVIRONINDEX和LUA_REGISTRYINDEX。考虑了一下,觉得registry表最合适。
Lua provides a registry, a pre-defined table that can be used by any C code to store whatever Lua value it needs to store. This table is always located at pseudo-index LUA_REGISTRYINDEX. Any C library can store data into this table, but it should take care to choose keys different from those used by other libraries, to avoid collisions. Typically, you should use as key a string containing your library name or a light userdata with the address of a C object in your code.

要将lua函数保存到这个表。lua提供了在表里增加一个条目的API,luaL_ref,返回值是新条目的key,一个整数。这样就万事俱备了。
程序初始化阶段,给所有会调用的lua函数分配句柄:

1findLuaItem( “a.b.c.func” );
2int handler = luaL_ref( L , LUA_REGISTRYINDEX );

以后调用lua函数:
1//将lua函数压栈
2lua_rawgeti( L , LUA_REGISTRYINDEX , handler );
3
4lua_push();
5lua_call();

加速网络应用程序的 4 种方法

M. Tim Jones ,资深软件工程师,Emulex

2006 年 2 月 13 日

使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行通信。与其他 API 一样,您可以通过一些方法使用 Sockets API,从而提高 Socket 的性能,或者限制 Socket 的性能。本文探索了 4 种使用 Sockets API 来榨取应用程序的最大性能并对 GNU/Linux® 环境进行优化从而达到最好结果的方法。

在开发 socket 应用程序时,首要任务通常是确保可靠性并满足一些特定的需求。利用本文中给出的 4 个提示,您就可以从头开始为实现最佳性能来设计并开发 socket 程序。本文内容包括对于 Sockets API 的使用、两个可以提高性能的 socket 选项以及 GNU/Linux 优化。

为了能够开发性能卓越的应用程序,请遵循以下技巧:

  • 最小化报文传输的延时。
  • 最小化系统调用的负载。
  • 为 Bandwidth Delay Product 调节 TCP 窗口。
  • 动态优化 GNU/Linux TCP/IP 栈。

    Read the rest of this entry »

升级了的开发环境

六月 24th, 2010. 杂记

终于电脑升级了,至少是面积大了,1920*1200,24的,好大好阔气,直接双开虚拟机当服务器,过瘾~~~

Read the rest of this entry »

游戏服务器思路

六月 24th, 2010. 服务器

这几天一直在想服务器方面的思路,现在终于越来越清晰了。大概的画了一下草图

Read the rest of this entry »