大家开过4g的空间吗?

中山野鬼 发布于 2013/07/09 02:44
阅读 1K+
收藏 2

最近一直在重新整理c的开发环境和工具链,包括自己的基本库。全部倒腾到64位上。反正嵌入式实在不想干了,以后就靠着server吃饭了。不过存在一个问题。size_t是64位的。

一个程序可以吃4G以上的空间,这种需求我懂,但一个程序有必要,开一个内存空间给一个指针,而这个空间就超过4G吗?我想请教大家,有没有遇到独立一个空间开到4G以上的。

这个问题的由来是,原先32位系统还好,因为16位做下标确实少。指针也32位不算浪费空间。而64位上,指针是64位的,整个代码全部指针指来指去,耗费存储太多。简单的道理比如做个链表,

struct{

list *pre;

list *next;

char d;

}

靠,一个节点192位。不是这么多你这个结构体数组无法对齐。

而如果是

struct {

_u32 pre,

_u32 next,

char d;

};

应该可以做到96位。但这个需要保证一个整体空间大小在4G以下。别和我说链表每个节点都动态申请,那是骗小学生的,这我不想讨论。

另外,64位上,size_t是64位的。这个也太占空间了。出了外部文件大小和指针,还真想不出有什么需要64做位置标定的。

想听听大家遇到的需求。看是否有必要还是使用size_t作为数组下标的类型。

就是大表的索引,我的理解,一个表支持4G个纪录(不是表总存储量),应该也给力吧。大到4G纪录的表还不分表,是不是太恶毒了???

加载中
0
猫哥-u
猫哥-u
读读Redis的源码,可能可以找到答案
0
L5_Railgun
L5_Railgun

 没有必要,如果需要size_t来索引一个数组,拿肯定可以分治。

就像写了5层if-else,肯定也可以简化

0
解凌云
解凌云

野鬼,结构体位域是否可以解惑!!正如你之前所述,节省空间是有必要的!!

0
中山野鬼
中山野鬼

引用来自“解念念”的答案

野鬼,结构体位域是否可以解惑!!正如你之前所述,节省空间是有必要的!!

位域 这年头不是为了省空间的,是为了方便位操作的。但汇编指令还是不会省。该怎么折腾怎么折腾。
0
中山野鬼
中山野鬼

引用来自“猫哥-u”的答案

读读Redis的源码,可能可以找到答案
这东西看了浪费时间。数据库,就是数据组织组织。没啥,无非关系数据库给做的熟透了。折腾出了不少概念。但往往也解决不了多少问题以及过于混乱。不是我胡扯。真的用的好的,立马解决问题的,还是关系性数据库的老功能。所谓花哨的东西,通常都是折腾来回,也不能彻底解决问题。
0
猫哥-u
猫哥-u

引用来自“中山野鬼”的答案

引用来自“猫哥-u”的答案

读读Redis的源码,可能可以找到答案
这东西看了浪费时间。数据库,就是数据组织组织。没啥,无非关系数据库给做的熟透了。折腾出了不少概念。但往往也解决不了多少问题以及过于混乱。不是我胡扯。真的用的好的,立马解决问题的,还是关系性数据库的老功能。所谓花哨的东西,通常都是折腾来回,也不能彻底解决问题。
看了再说吧,不是关系数据库,别以自己的经验一棒子打死
0
中山野鬼
中山野鬼

引用来自“猫哥-u”的答案

引用来自“中山野鬼”的答案

引用来自“猫哥-u”的答案

读读Redis的源码,可能可以找到答案
这东西看了浪费时间。数据库,就是数据组织组织。没啥,无非关系数据库给做的熟透了。折腾出了不少概念。但往往也解决不了多少问题以及过于混乱。不是我胡扯。真的用的好的,立马解决问题的,还是关系性数据库的老功能。所谓花哨的东西,通常都是折腾来回,也不能彻底解决问题。
看了再说吧,不是关系数据库,别以自己的经验一棒子打死
哈。关注点不一样。比如我关注的数据库,包括图形,后期看应该有图像。还有统计量。至于数据库的基础部分,看redis 的东西,我说了,确实浪费时间。再说这玩意也没什么东西。和我没时间看linux内核不一样。后者有东西,但没时间,看了也没意义。。
0
the4king
the4king

引用来自“中山野鬼”的答案

引用来自“猫哥-u”的答案

读读Redis的源码,可能可以找到答案
这东西看了浪费时间。数据库,就是数据组织组织。没啥,无非关系数据库给做的熟透了。折腾出了不少概念。但往往也解决不了多少问题以及过于混乱。不是我胡扯。真的用的好的,立马解决问题的,还是关系性数据库的老功能。所谓花哨的东西,通常都是折腾来回,也不能彻底解决问题。

浪费时间?

也就是redis源码对于你来说毫无学习价值?

那你怎么没搞出个NB的开源系统,造福于全世界的程序员?

“还是关系数据库的老功能” 我看你也应该是个老码农了,难道不知道多少网站已经在大量使用redis呢?


对了,你可以去喷一喷新浪微博: 你们关系型数据库真的用的太烂了,居然在用redis这种花哨的东西

0
猫哥-u
猫哥-u

引用来自“中山野鬼”的答案

引用来自“猫哥-u”的答案

引用来自“中山野鬼”的答案

引用来自“猫哥-u”的答案

读读Redis的源码,可能可以找到答案
这东西看了浪费时间。数据库,就是数据组织组织。没啥,无非关系数据库给做的熟透了。折腾出了不少概念。但往往也解决不了多少问题以及过于混乱。不是我胡扯。真的用的好的,立马解决问题的,还是关系性数据库的老功能。所谓花哨的东西,通常都是折腾来回,也不能彻底解决问题。
看了再说吧,不是关系数据库,别以自己的经验一棒子打死
哈。关注点不一样。比如我关注的数据库,包括图形,后期看应该有图像。还有统计量。至于数据库的基础部分,看redis 的东西,我说了,确实浪费时间。再说这玩意也没什么东西。和我没时间看linux内核不一样。后者有东西,但没时间,看了也没意义。。

其实你说的这个东西是有办法的,编译器已经帮我们考虑到了,举个例子:cc -o test test.c -m32

对内存很需要考虑精打细算的那些结构体,编译脚本可以试试加上-m32参数,如果可行记得回复哦

0
铂金胖子
铂金胖子

以前做的系统,为了增加效率,把一些数据都放到了内存中。

一次开十几二十多G的内存。用来给hashtable用,这算不算?

返回顶部
顶部