您的位置:程序门 -> c/c++ -> c++ 语言



看过<<stl源码剖析>>的朋友进来指点一下.


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


看过<<stl源码剖析>>的朋友进来指点一下.
发表于:2008-01-22 08:04:33 楼主
在p116讲到vector的构造函数的时候,如:

  vector(size_type   n);

会调用到   alloc::allocate(n).

现在的问题是,     vector(size_type   n)中的n,   是元素的个数,   而   alloc::allocate(n)中的n,   是字节数.   好像有点问题啊.   本来要分配n个int的,   这不成了n个字节了吗?
发表于:2008-01-22 08:44:141楼 得分:0
“alloc::allocate(n)中的n,       是字节数”.你确定?还是再看几遍吧。
发表于:2008-01-22 08:46:192楼 得分:0
的确,字节?
发表于:2008-01-22 08:54:243楼 得分:0
这是一个适配的内存分配器代码
c/c++ code
template<class _tp, class _alloc> class simple_alloc { public: static _tp* allocate(size_t __n) { return 0 == __n ? 0 : (_tp*) _alloc::allocate(__n * sizeof (_tp)); } static _tp* allocate(void) { return (_tp*) _alloc::allocate(sizeof (_tp)); } static void deallocate(_tp* __p, size_t __n) { if0 != __n) _alloc::deallocate(__p, __n * sizeof (_tp)); } static void deallocate(_tp* __p) { _alloc::deallocate(__p, sizeof (_tp)); } };
发表于:2008-01-22 10:06:414楼 得分:0
你是怎么看出来是字节的?
发表于:2008-01-22 10:21:415楼 得分:0
关键在于alloc就是有类型参数的实现,看看代码就知道n不是n个字节,是n个t

发表于:2008-01-22 11:02:406楼 得分:0
友情帮顶。
发表于:2008-01-22 11:02:447楼 得分:0
郁闷,都说完了
发表于:2008-01-22 14:15:168楼 得分:0
晕,来晚了。

在这里友情提醒一下。stl源代码剖析里使用的sgi的stl,而stl在c++标准里面是没有规定实现方式的,因此不同的编译器会提供不同的stl实现,注意不要以偏概全。

vc里面和intel   c++里面的stl都不是使用的这个实现。
另外,书中的实现代码是经过大量简化的,实际的实现为了保证多平台和多编译器的兼容性,要复杂许多。
发表于:2008-01-22 22:27:499楼 得分:0
在p62,  
static   void*   allocate(size_t   n)
{
        if   (   n   >   (size_t)__max_bytes   )
        {....}
}
  __max_bytes   就是那个分水岭128.   这个n不是字节吗?
发表于:2008-01-22 22:30:5810楼 得分:0
如果是akirya   说的那样:
        _alloc::allocate(__n   *   sizeof   (_tp));  
就好理解了.
发表于:2008-01-22 22:38:1111楼 得分:0
static       void*       allocate(size_t       n)  
{  
                if       (       n       >       (size_t)__max_bytes       )  
                {....}  
}  
    __max_bytes       就是那个分水岭128.       这个n不是字节吗?

==================================================
allocate是一个函数,是alloc::allocate调用的
发表于:2008-01-22 22:58:5312楼 得分:0
不是吧,   上面这个   allocate   是   __default_alloc_template   的成员啊.  

而alloc本身就是二级配置器_default_alloc_template吧.
发表于:2008-01-23 08:44:2213楼 得分:0
兄弟,看书认真一点,在p54
发表于:2008-01-23 15:53:2214楼 得分:0
看书认真,然后让机多实践,多分析原因。。。
发表于:2008-01-23 16:17:0215楼 得分:0
这种帖子吸引高人?
发表于:2008-01-23 22:26:5416楼 得分:0
关注
发表于:2008-01-23 23:55:5417楼 得分:0
多谢taodm


快速检索

最新资讯
热门点击