C/C++分类的最新日记

关于stlchina.org的问题

| 暂无评论
stlchina.org早就进行了备案,但是没有反馈,一直处于备案中,为了方便大家,开通了有备案域名的临时访问。

http://stlchina.huhoo.net/

欢迎大家访问。

项目框架设计模式

| 暂无评论

目的

  1. 解决多人开发过程中协作的问题;
  2. 解决配置文件规范;
  3. 解决项目源码包和二进制打包的问题;
  4. 解决文档规范;
我们知道在一个结构体当中,往往为了节省内存空间,会花点心思进行字节对齐。
typedef struct __aligning
{
      unsigned short n;
      unsigned int m;
      unsigned short x;
} aligning1;
针对上面的struct:aligning1,我们使用sizeof计算会得到12个字节,显然没有符合4字节对齐的方式,以下写法更为科学:
typedef struct __aligning
{
      unsigned short n;
      unsigned short x;
      unsigned int m;
} aligning2;
此时struct会占用8个字节。

然而往往为了更细化,可使用bool(c++)或者enum获得更小的容器来节省空间,但是1个字节已经成为下限,如果有8个成员变量,取值范围是1和0的话,也需要8个字节,如果节省更多的空间呢?
C经典语法类型,表示bit方式可以如下:
typedef struct __aligning
{
      unsigned n:1;
      unsigned m:1;
      ...
      unsigned t:1;
} aligning3;
这样最多也就4个字节,其实4个字节可以最多表示32个成员变量,每个变量1bit;
再结合实际情况,用实际的最大值,结合字节对齐,就可以节省更多的内存空间,大家在工程中不妨试试哟!

jni中的字符编码问题

| 暂无评论

    以前在使用jni中,发现jni字符问题,另外jni还存在着线程的不安全性,着实感觉jni不怎么地,但是目前没有好的jni的替代方案,这次介绍的是jni字符编码问题中需要注意的一个问题。

又说iconv

| 暂无评论

在多线程环境中,iconv本身是不支持多线程安全的。
比如在代码段中:

iconv_t cd = iconv_open(tocode, fromcode);
if (cd == (iconv_t)-1) {
exit(1);
}
iconv(cd, &inbuf, &len, &outbuf, &buflen);
iconv_close(cd);
多线程环境中,iconv_open不断打开资源,虽然iconv_close能够释放,但是并不能立即释放资源,这样造成内存泄漏。

比较正确的方法是静态地初始化iconv_open和析构iconv_close,或对上面代码段进行锁机制可实现线程安全。

关于此归档

这里是C/C++分类日记的归档。

下一个分类cnangel手记

主索引归档页可以看到最新的日记和所有日记。

2009年12月

Sun Mon Tue Wed Thu Fri Sat
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
Powered by Movable Type 4.31-zh-cn