小编pac*_*nga的帖子

gcc -Wshadow选项的更细粒度的行为

伙计们,我真的很喜欢-Wshadow选项,因为它有助于发现一些可能有问题的代码片段.我想在一个非常大的项目中使用它,但我不能,因为它太严格了.例如,它会针对以下情况抛出警告:

struct Foo
{
  Foo(int info) : info_(info) {} //shadow warning is here
  void info(){ ... }
  int info_;
};
Run Code Online (Sandbox Code Playgroud)

gcc 在构造函数中抛出关于"int info"变量阴影"void info"方法的警告,这对我来说并不是真正有用的警告.

我真正关心的是如下情况:

  int i = 0;
  for(int j=0;j<10;++j)
  {
    int i = j; //local scope variable "int i" shadows outer scope variable
    ++i;
  }
Run Code Online (Sandbox Code Playgroud)

是否有可能gcc只对这些案件发出警告?

c gcc

7
推荐指数
1
解决办法
2508
查看次数

克隆Lua州

伙计们,有没有办法克隆Lua状态?

在我的游戏应用程序中,Lua虚拟机的初始化过程非常繁重(大约1秒,因为许多脚本一次加载).我为每个自治代理程序都有一个单独的Lua VM,一旦创建了代理程序,它的Lua初始化对FPS影响非常大.

我正在考虑以下架构:如何保持"preforked"Lua状态,然后只为每个代理克隆?可能吗?

lua cloning

6
推荐指数
1
解决办法
3529
查看次数

MySQL InnoDB大表:要分片还是要添加更多内存?

伙计们,我是社交游戏的开发者,游戏中已经有70万玩家,每天大约有7k新玩家注册,大约有5k玩家在线.

数据库服务器运行在功能非常强大的硬件上:16核CPU,24 Gb RAM,带有BBU的RAID-10,内置4个SAS磁盘.我正在使用Percona服务器(修补MySQL-5.1),目前InnoDB缓冲池是18Gb(尽管根据innotop只提供了一些免费缓冲区).数据库服务器运行良好(2k QPS,iostat%util为10-15%,在vmstat中"b"状态几乎总是0个进程,loadavg为5-6).然而,有时(每隔几分钟)我会得到大约10-100个慢查询(每个查询可能持续约5-6秒).

MySQL数据库中有一个大的InnoDB表占用了最多的空间.它有大约3亿行,它的大小约为20 Gb.当然,这个表正在逐渐增长......我开始担心它会以负面的方式影响数据库的整体性能.在不久的将来,我将不得不做些什么,但我不确定到底是什么.

基本上问题归结为是否要分片或只是添加更多RAM.当然,后者更简单.看起来我可以添加高达256 Gb RAM.但问题是我是否应该投入更多时间来实施分片,因为它更具可扩展性?

mysql innodb sharding

6
推荐指数
1
解决办法
1493
查看次数

以最小的停机时间改变MySQL InnoDB表

我有一个巨大的InnoDB表(> 5亿行),我想通过散列进行分区,以减少索引大小.我想以最短的停机时间(例如10分钟可接受)实现这一目标,有哪些可能的选择?

我在考虑如下事情:

  1. 创建新的分区表
  2. 使用"insert ... select ..."将来自旧表的所有数据插入此新表中
  3. 使服务器对客户端不可用
  4. 以某种方式同步在步骤2中使用新表发生在旧表中的更改
  5. 用新的表替换旧表
  6. 使服务器可供客户使用

主要问题是在步骤4中可以使用什么工具.问题是在步骤2中可能会对原始表进行大量更改:新插入,更新,删除 - 同步工具应考虑所有这些. ..

我相信另一种可行的方法是:

  1. 设置一个复制的从服务器
  2. 将此从属服务器与主服务器同步
  3. 切换主/从角色并重新配置所有客户端以连接到新主服务器
  4. 改变前一个主人的表
  5. 等待主/从同步
  6. 再次切换主/从角色,重新配置所有客户端

你会推荐哪一个?

mysql innodb alter-table downtime

6
推荐指数
1
解决办法
380
查看次数

从shell杀死linux套接字(gentoo amd64)

伙计们,从linux中杀死shell的既定连接的最佳方法是什么?

看起来有'tcpkill'和'cutter'工具可用,但是,在我的gentoo amd64 tcpkill被'amd64'关键字和切割器禁用,使用时,打印错误"openning/proc/net/ip_conntrack:没有这样的文件或目录".

有没有其他方法来终止连接?

谢谢.

sockets linux x86-64 gentoo

5
推荐指数
1
解决办法
3991
查看次数

使用Linux Virtual Server在MMO游戏中对区域进行负载均衡

我是一个MMO游戏的开发者,目前我们在我的公司面临一些可伸缩性问题,我认为,这些问题可以通过适当的游戏世界聚类来解决.

我真的不想重新发明轮子,这就是为什么我认为Linux Virtual Server可能是一个不错的选择,特别是使用一些7级负载平衡技术.

我目前正在将ktcpvs视为负载平衡解决方案,并想知道它是否是一个合适的选择.

主要思想是在专用服务器上运行多个区域(就我的游戏而言"位置").当玩家决定前往某个特定位置时,负载均衡器会决定哪个区域服务器将实际为玩家提供服务(这实际上是我需要7级负载均衡器的原因)

你们对上述所有人都有什么看法?

更新:我向LVS用户发送了相同的问题邮件列表http://marc.info/?l=linux-virtual-server&m=124976265209769&w=2

更新:我也在gamedev.net论坛http://www.gamedev.net/community/forums/topic.asp?topic_id=544386上开始了类似的话题

linux virtualization cluster-computing mmo

5
推荐指数
1
解决办法
2280
查看次数

Xcode 4 中的源代码生成

我有一个项目,其中大量 C++ 代码是从一些元描述自动生成到多个文件中的。每当发生新构建时,如何让 Xcode 4 自动将这些文件添加到项目中?

注意:我知道构建阶段和自定义脚本,但我能找到的只是与资源相关的:将资源文件复制到最终的应用程序包。就我而言,我需要让 Xcode 4 自动将这些自动生成的文件注入应用程序构建过程中...

xcode code-generation

5
推荐指数
1
解决办法
807
查看次数

使用反射设置C#struct/class字段时是否可以避免装箱?

假设我有一个原始值,我需要使用反射分配给某个字段.我确信该字段具有相同的原始值类型.

是否有可能以某种方式设置这个值没有拳击?

void SetFloat(object o, string name, float val)
{
  var type = o.GetType();
  var fld = type.GetField(name);
  fld.SetValue(o, val /*boxing happens here*/);
}
Run Code Online (Sandbox Code Playgroud)

PS这不是关于延迟,而是关于可能的GC压力.我正在使用Unity3D,它使用的是旧的Mono版本,而后者又使用非常优化的GC实现.每个额外的内存分配计数:(

PPS我正在构建自己的基于C#的解释器,避免反射似乎几乎不可能.

c# reflection mono boxing

5
推荐指数
1
解决办法
472
查看次数

gcc预编译头文件使用-c选项时的奇怪行为

短篇故事:

我无法使用gcc -c选项使预编译的头文件正常工作.

很长的故事:

伙计们,我在Linux上使用gcc-4.4.1,在一个非常大的项目中尝试预编译头之前,我决定在简单程序上测试它们.他们"有点工作",但我对结果不满意,我确信我的设置有问题.

首先,我编写了一个简单的程序(main.cpp)来测试它们是否可以工作:

#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/type_traits.hpp>

int main()
{
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了预编译头文件pre.h(在同一目录中),如下所示:

#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/type_traits.hpp>
Run Code Online (Sandbox Code Playgroud)

...并编译它:

$ g++ -I. pre.h
Run Code Online (Sandbox Code Playgroud)

(pre.h.gch创建)

之后,我使用和不使用预编译头来测量编译时间:

与pch

$ time g++ -I. -include pre.h main.cpp

real    0m0.128s
user    0m0.088s
sys  0m0.048s
Run Code Online (Sandbox Code Playgroud)

没有pch

$ time g++ -I. main.cpp 

real    0m0.838s
user    0m0.784s
sys  0m0.056s
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好!快了近7倍,令人印象深刻!现在让我们尝试一些更现实的东西.我的所有资源都是使用-c选项构建的,出于某种原因我无法使用pch.您可以通过以下步骤重现这一点......

我创建了测试模块foo.cpp,如下所示:

#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/type_traits.hpp>

int whatever()
{
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下是我尝试使用和不使用pch构建模块foo.cpp的时间:

与pch

$ time g++ -I. …
Run Code Online (Sandbox Code Playgroud)

c++ gcc precompiled-headers

4
推荐指数
1
解决办法
1365
查看次数