游戏开发论坛

 找回密码
 立即注册
搜索
楼主: vfbf

你们编写服务端程序的时候会用STL吗?

[复制链接]

23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2012-8-9 17:05:00 | 显示全部楼层

Re:你们编写服务端程序的时候会用STL吗?

另外吐槽完毕不要攻击我,想使用stl或者mfc本人也不反对,(我见过有游戏服务器狂使用CString的,没关系)毕竟游戏的好坏是看在线人数的。。。
服务器神马的不过只是大环节中很简单的一个零件罢了。

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2012-8-10 08:58:00 | 显示全部楼层

Re:你们编写服务端程序的时候会用STL吗?

现在的趋势是没用过boost,没用过ace,不会MFC出门都不好意思和人打招呼。
其实软件开发最怕就是烂用第三方的东西,尤其是崩溃都找不到原因那种。
虽然我没那么极致,只所以认为STL还可以接受,是因为STL的代码还看的懂。
出了问题起码可以找到原因,看不过去不爽的还可以改。

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
发表于 2012-8-10 12:40:00 | 显示全部楼层

Re: Re: Re:你们编写服务端程序的时候会用STL吗?

vfbf: Re: Re:你们编写服务端程序的时候会用STL吗?


既然用了链表. 那就会有动态内存分配. 和stl能差到哪去?


我觉得stl里的东西还是少用为好,
像vector,list这类需要频繁分配内存的结构,都应该自己实现,即用自己提供的内存分配器来管理.
只有像那些不需要频繁分配内存的东西,才适合用stl,比如一些预先初始化好的map表.
算法所带来的开销不如内存分配来的大.

12

主题

21

帖子

27

积分

注册会员

Rank: 2

积分
27
 楼主| 发表于 2012-8-13 10:55:00 | 显示全部楼层

Re: Re: Re: Re:你们编写服务端程序的时候会用STL吗?

微无渊: Re: Re: Re:你们编写服务端程序的时候会用STL吗?



我觉得stl里的东西还是少用为好,
像vector,list这类需要频繁分配内存的结构,都应该自己实现,即用自己...

vector先reserve之后并不会频繁分配内存。 至于list, 我想服务端程序很少用到。
关于实现自己的内存分配器, 老实说我觉得stl标准分配器已经足够好了。

12

主题

21

帖子

27

积分

注册会员

Rank: 2

积分
27
 楼主| 发表于 2012-8-13 11:07:00 | 显示全部楼层

Re: Re: Re:你们编写服务端程序的时候会用STL吗?

疯子阿虹: Re: Re:你们编写服务端程序的时候会用STL吗?




STL在多线程的情况下表现很差。多线程下heap的效率本身就不好。stl会导致不停地分配和释放小块内存。...

STL在多线程情况下表现很差。。。 stl本来就不是多线程安全的。
效率不好应该在自己的代码上找原因吧。

stl由于复杂的代码,本身确实会降低一些性能。 但是只要使用得当很少出现什么频繁分配内存和施放内存的情况。

stl被服务端程序诟病, 更多的是动态分配内存导致的对服务端稳定性的担忧。
但对于个把月就要维护的游戏服务端来说, 这种担忧其实有点多余。

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2012-8-13 11:18:00 | 显示全部楼层

Re: 你们编写服务端程序的时候会用STL吗?

小内存在STL那一段本身完全不是问题。
不爽的话自己写个allocator就可以了。

多线程安全?从来没认为那玩意能多线程安全。
因为多线程的问题,导致效率下降,还是检查自己的算法设计吧。

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2012-8-20 15:52:00 | 显示全部楼层

Re: Re: Re:你们编写服务端程序的时候会用STL吗?

疯子阿虹: Re: Re:你们编写服务端程序的时候会用STL吗?




STL在多线程的情况下表现很差。多线程下heap的效率本身就不好。stl会导致不停地分配和释放小块内存。...



服务器一般用linux,linux中红帽用的比较多,而红帽下的stl是sgi版本,
就跟《stl源码剖析》一样,小块内存分配stl本身就有内存池,这个问题他们早就考虑到了,
在这个分配器中,小于128byte的内存使用池里预分配的数据,大于128则因为内存大小足够而不直接用全局new:

      enum { _S_align = 8 };
     82       enum { _S_max_bytes = 128 };
     83       enum { _S_free_list_size = (size_t)_S_max_bytes / (size_t)_S_align };

211       if (__bytes > size_t(_S_max_bytes) || _S_force_new == 1)
    212         __ret = static_cast<_Tp*>(:perator new(__bytes));
    213       else
    214   
     {
    215           _Obj* volatile* __free_list = _M_get_free_list(__bytes);
....
}

stl也提供最原始的分配方式 std::allocator<_Val>


----------------
至于锁问题  sgi本身就不是线程安全的 那是开发者自己要关注的问题

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2012-8-20 17:34:00 | 显示全部楼层

Re: Re: Re: Re:你们编写服务端程序的时候会用STL吗?

xxfihm: Re: Re: Re:你们编写服务端程序的时候会用STL吗?




服务器一般用linux,linux中红帽用的比较多,而红帽下的stl是sgi版本,
就跟《stl源码剖析》一样,小...

stl_port版本的stl貌似是支持线程安全的

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
发表于 2012-8-20 19:26:00 | 显示全部楼层

Re: Re: Re: Re:你们编写服务端程序的时候会用STL吗?

xxfihm: Re: Re: Re:你们编写服务端程序的时候会用STL吗?




服务器一般用linux,linux中红帽用的比较多,而红帽下的stl是sgi版本,
就跟《stl源码剖析》一样,小...


搜了下相关文章,的确有这么一个内存分配机制,受教了!

23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2012-8-21 22:51:00 | 显示全部楼层

Re: Re: Re: Re: Re:你们编写服务端程序的时候会用STL吗?

xxfihm: Re: Re: Re: Re:你们编写服务端程序的时候会用STL吗?


stl_port版本的stl貌似是支持线程安全的


stl怎么可能是线程安全的。。。
你只是指那个小内存分配器分配内存时是线程安全的吧,那个小内存分配器修改一下,变成细粒度锁,理论还是不错的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-26 23:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表