分配器

在C++编程中,分配器(英语:allocator)是C++标准库的重要组成部分。C++的库中定义了多种被统称为"容器"的数据结构(如链表、集合等),这些容器的共同特征之一,即是其大小可以在程序的运行时改变;为了实现这一点,进行动态内存分配就显得尤为必要,在此分配器就用于处理容器对内存的分配与释放请求。换句话说,于分配器用封装STL容器在内存管理上的低层细节。默认情况下,C++标准库使用其自带的通用分配器,但根据具体需要,程序员也可自行定制分配器以替代之。

分配器最早由亚历山大·斯特潘诺夫作为C++标准模板库(Standard Template Library,简称STL)的一部分发明,其初衷是创造一种能"使库更加灵活,并能独立于底层数据模型的方法",并允许程序员在库中利用自定义的指针和引用类型;但在将标准模板库纳入C++标准时,C++标准委员会意识到对数据模型的完全抽象化处理会带来不可接受的性能损耗,为作折中,标准中对分配器的限制变得更加严格,而有鉴于此,与斯特潘诺夫原先的设想相比,现有标准所描述的分配器可定制程度已大大受限。

分配器基本信息

中文名称 分配器 外文名称 allocator
标准模板库 亚历山大·斯特潘诺夫 属于 C++标准库的重要组成部分

有线电视网的频率不断提升,功能不断加强,因此对分配器的要求不断提高。

在接口设备上分配器是将音视频信号分配至多个显示设备或投影显示系统上的一种控制设备。它是专门分配信号的接口形式的设备。分配器具有一个显著的特点就是,可以将高清AV信号通过普通的同轴电缆线延长到200米左右,能彻底解决工程中因信号信号源1个而显示设备有多个种类与数量而造成的问题。

用户使用时先将信号通过一根标配的高质量线引接到分配器的INPUT上,分配器上有两个或者四个甚至多个输出口,其中可以接到本地显示器上,其他的可以接到远端的显示设备上,通过调节分配器上的亮度和对比度,就可以把远端显示设备的图像清晰度调整到与本地一样的效果。通过调整后,远端显示设备的图像质量会有质的提高,分配器可以最大程度的消除脱尾和重影现象,完全可以满足目前我国各种重点工程对高品质图像质量的要求。

分配器造价信息

市场价 信息价 询价
材料名称 规格/型号 市场价
(除税)
工程建议价
(除税)
行情 品牌 单位 税率 供应商 报价日期
分配器 分配器 查看价格 查看价格

13% 深圳迈威有线电视器材有限公司
VGA分配器 SP-1825N品种:分配器; 查看价格 查看价格

LANBE

13% 沈阳速倍科技发展有限公司
分配器 品种:分配器;规格:MW-7712H; 查看价格 查看价格

迈威

13% 广州伟视杰电子有限公司
分配器 品种:分配器;规格:MW-7716H; 查看价格 查看价格

迈威

13% 广州伟视杰电子有限公司
分配器 品种:分配器;规格:MW-772H; 查看价格 查看价格

迈威

13% 广州伟视杰电子有限公司
分配器 品种:分配器;规格:MW-7708H; 查看价格 查看价格

迈威

13% 广州伟视杰电子有限公司
分配器 品种:分配器;规格:MW-774H; 查看价格 查看价格

迈威

13% 广州伟视杰电子有限公司
DVI分配器 品种:视频分配器;型号:DVI0102;规格:1入2出 查看价格 查看价格

深视王

13% 深圳市深创远数码技术有限公司(北京)
材料名称 规格/型号 除税
信息价
含税
信息价
行情 品牌 单位 税率 地区/时间
视频分配器 336810 查看价格 查看价格

湛江市2007年3季度信息价
电视分配器 2SP 查看价格 查看价格

佛山市顺德区2007年10月信息价
电视分配器 2SP 查看价格 查看价格

湛江市2006年3月信息价
电视分配器 4PC 查看价格 查看价格

湛江市2006年3月信息价
电视分配器 4SP 查看价格 查看价格

佛山市2006年3月信息价
电视分配器 4SP 查看价格 查看价格

佛山市2006年2月信息价
电视分配器 3SP 查看价格 查看价格

佛山市2005年4季度信息价
电视分配器 2SP 查看价格 查看价格

佛山市2005年3季度信息价
材料名称 规格/需求量 报价数 最新报价
(元)
供应商 报价地区 最新报价时间
耦合分配器 耦合分配器|30.3个 1 查看价格 深圳英智源智能系统有限公司 广东   2018-05-29
分配器 分配器|6个 1 查看价格 深圳迈威有线电视器材有限公司 广西   2018-01-19
分配器 分配器|1台 1 查看价格 深圳鑫迈威有线电视器材有限公司 四川   2018-04-19
HDMI分配器 HDMI分配器|1台 1 查看价格 河北志昂科技有限公司 四川  成都市 2022-03-22
分配器 分配器|1个 1 查看价格 深圳迈威有线电视器材有限公司 全国   2019-03-21
VGA分配器 2路VGA分配器|5台 3 查看价格 广州市锐丰音响科技股份有限公司 广东  佛山市 2019-06-05
分配器 分配器|2个 3 查看价格 广州鼎铭视讯器材有限公司 广东  深圳市 2016-10-18
分配器 1.四分配器|1个 1 查看价格 深圳迈威有线电视器材有限公司 全国   2018-10-24

1、频率范围:分配器使用在整个有线电视网中,因此应具有宽带的频率特性;

输入输出阻抗:有线电视网中的射频各种接口阻抗均应为75欧,以实现阻抗匹配,因此分配器输入端及输出端阻抗均应为75欧;

2、分配损失:在系统中总希望接入分配器损耗越小越好。分配损失Ls的多少和分配路数n的多少有关,在理想情况下Ls=10lgn,当n=2时为二分配器分配损失为3dB。实际上除了等分信号的损失外,还有一部分是由于分配器件本身有衰减,所以总比计算值要大。如在550-750MHz时二分配器分配损失工程上常取值3.5dB,4分配器损失常取值8dB;

3、相互隔离:相互隔离亦称分配隔离。如果在分配器的某一个输出端加入一个信号,该信号电平与其它输出端该信号电平之差即是相互隔离,一般要求分配器输出端隔离度大于20dB以上。如果驻波比太大,则传输信号就会在分配器的输入端或者输出端产生反射,对图像质量产生不良影响,如重影等。 分配器在工程中还分为过电型分配器、户外型分配器、户内分配器等。

4、驻波比:全称为电压驻波比,又名VSWR和SWR,为英文Voltage Standing Wave Ratio的简写。

驻波比就是一个数值,用来表示天线和电波发射台是否匹配。如果 SWR 的值等于1, 则表示发射传输给天线的电波没有任何反射,全部发射出去,这是最理想的情况。如果SWR 值大于1, 则表示有一部分电波被反射回来,最终变成热量,使得馈线升温。被反射的电波在发射台输出口也可产生相当高的电压,有可能损坏发射台。

5、反射损耗 是指负载直接接在信号源上所得到的功率和由于分配器匹配不好引起的反射功率之比 用dB表示

6、射频特性

亚历山大·斯特潘诺夫与李梦(Meng Lee)在1994年将标准模板库草案提交给C++标准委员会。提交伊始,草案就得到了委员会的初步支持,但委员会成员也对此提出了一些意见,尤其是要求斯特潘诺夫定制库内的容器,使之与底层存储模型相独立。作为对要求的回应,斯特潘诺夫发明了分配器,而正因此,标准模板库的所有容器接口也被迫重写,以与分配器相兼容。在修改标准模板库以将之引入C++标准库的过程中,许多标准委员会成员(如安德鲁·克尼格与比雅尼·斯特劳斯特鲁普)也与斯特潘诺夫协同工作。他们亦发现自定义分配器甚至有应用于长生命周期(持续存储)的标准模板库容器的潜力,斯特潘诺夫对此的评论则是"重要而有趣的见解"。

在原有的提案里的分配器设定中,斯特潘诺夫杂糅了一些语言特性(如可将模板参数也定义为模板),但由于当时的编译器皆无法处理之,所以最终并未被标准委员会所接纳,斯特潘诺夫则如此描述当时的情形:"比雅尼·斯特劳斯特鲁普与安迪·克尼格需要花大量时间来检查我们是否正确使用了这些未实现的特性。"在分配器应用后,之前库中直接使用的指针与引用类型也可以分配器所定义的类型替代,斯特潘诺夫亦曾如此描述分配器:"标准模板库有个不错的特性便是:唯一要提及机器相关类型的地方(……)(只需)被封装成(仅)约16行内的代码。"除此以外,斯特潘诺夫原本还打算在分配器中完全封装存储模型,但标准委员会意识到这一做法会造成无法接受的性能损失,因而为补偿之,分配器的使用需求也做了一定扩充。

分配器的应用中比较特别的一点是,容器的实现过程中可能会假定分配器对指针与相关整型的类型定义与默认分配器所提供的等价,因而给定分配器类型的所有实例在比较时常会得出"相等"的结果,而这一效果实际上恰与设计分配器的初衷背道而驰,并使带状态分配器的可用性大大受限,斯特潘诺夫后来对此评论道:"(分配器)理论上说是不差的主意(……)但不幸的是在实践中无法发挥其功效。 "他洞察到若要令分配器更加实用,就有必要针对核心语言的引用部分进行修改。

分配器常见问题

  • 分配器,什么是分配器

    分配器就是把一路信号平均分成几路相等的信号输出,即每个输出口的衰减值一样大

  • 视频分配器和VGA分配器有什么区别?

    视频分配器--我们一般指复合视频信号的分配设备 设备一般有 DVD 摄像头等设备的VIDEO信号VGA分配器一般指电脑的输出信号 且一路VGA信号源分配到几个甚至几十个显示设备上进行显示您前端...

  • 层间分配器问题?

    有线连着是都供电,没有线连着是各管各的。

在C++编程中,分配器(英语:allocator)是C++标准库的重要组成部分。C++的库中定义了多种被统称为"容器"的数据结构(如链表、集合等),这些容器的共同特征之一,即是其大小可以在程序的运行时改变;为了实现这一点,进行动态内存分配就显得尤为必要,在此分配器就用于处理容器对内存的分配与释放请求。换句话说,于分配器用封装STL容器在内存管理上的低层细节。默认情况下,C++标准库使用其自带的通用分配器,但根据具体需要,程序员也可自行定制分配器以替代之。

分配器最早由亚历山大·斯特潘诺夫作为C++标准模板库(Standard Template Library,简称STL)的一部分发明,其初衷是创造一种能"使库更加灵活,并能独立于底层数据模型的方法",并允许程序员在库中利用自定义的指针和引用类型;但在将标准模板库纳入C++标准时,C++标准委员会意识到对数据模型的完全抽象化处理会带来不可接受的性能损耗,为作折中,标准中对分配器的限制变得更加严格,而有鉴于此,与斯特潘诺夫原先的设想相比,现有标准所描述的分配器可定制程度已大大受限。

虽然分配器的定制有所限制,但在许多情况下,仍需要用到自定义的分配器,而这一般是为封装对不同类型内存空间(如共享内存与已回收内存)的访问方式,或在使用内存池进行内存分配时提高性能而为。除此以外,从内存占用和运行时间的角度看,在频繁进行少量内存分配的程序中,若引入为之专门定制的分配器,也会获益良多。

分配器产品分类

(1)A型分配器、G型分配器、M型分配器、F型分配器叫做板式分配器,其中A型90%用于国内。、

(2)D型分配器、S型分配器、U型分配器叫做井式分配器,其中S型分配90%用于国内

美洲和欧洲产品的区别:美标的带安全阀,但是欧标的没有。

任意满足分配器使用需求的C++类都可作分配器使用。具体来说,当一个类(在此设为类A)有为一个特定类型(在此设为类型T)的对象分配内存的能力时,该类就必须提供以下类型:A::pointer(指针),A::const_pointer(常量指针), A::reference(引用),A::const_reference(常量引用)及A::value_type(值类型),如此才能以通用的方式声明对象与对该类对象的引用T。allocator提供这些指针或引用的类型定义的初衷,是隐蔽指针或引用的物理实现细节;因为在16位编程时代,远指针(far pointer)是与普通指针非常不同的,allocator可以定义一些结构来表示这些指针或引用,而容器类用户不需要了解其是如何实现的。同时类A还需提供类型A::size_type(表示所用内存大小的类型)与A::difference_type(指针差值的类型),其中size_type类型是用于表示类A所定义的分配模型中的单个对象最大尺寸的无符号整型,而difference_type类型是带符号整型,用于表示分配模型内的两个指针的差异值。

虽然按照标准,在库的实现过程中允许假定分配器(类)A的A::pointer(指针)与A::const_pointer(常量指针)即是对T*与T const*的简单的类型定义,但一般更鼓励支持通用分配器。

另外,设有对于为某一对象类型T所设定的分配器A,则A必须包含四项成员函数,分别为分配函数、解除分配函数、最大个数函数和地址函数。

分配函数用以进行内存分配,形如A::pointer A::allocate(size_type n, A<void>::const_pointer hint = 0)。其中调用参数n即为需要分配的对象个数,另一调用参数hint(须为指向已为A所分配的某一对象的指针)则为可选参数,可用于在分配过程中指定新数组所在的内存地址,以提高引用局部性,但在实际的分配过程中程序也可以根据情况自动忽略掉该参数。该函数调用时会返回指向分配所得的新数组的第一个元素的指针,而这一数组的大小足以容纳n个T类元素。在此需要注意的是,调用时只为此数组分配了内存,而并未实际构造对象。

解除分配函数形如void A::deallocate(A::pointer p, A::size_type n)。其中p为需要解除分配的对象指针(以A::allocate函数所返回的指针做参数),n为对象个数,而调用该函数时即是将以p起始的n个元素解除分配,但同时并不会析构之。C++标准明确要求在调用deallocate之前,该地址空间上的对象已经被析构。

最大个数函数形如A::max_size(),调用时返回调用一次分配函数A::allocate所能成功分配的元素的最大个数,其返回值等价于A::size_type(-1) / sizeof(T)的结果 。

地址函数形如A::pointer A::address ( reference x ),调用时返回一个指向x的指针。

除此以外,由于对象的构造/析构过程与分配/解除分配过程分别进行 ,因而分配器还需要成员函数A::construct(构造函数)与A::destroy(析构函数)以对对象进行构造与析构,且两者应等价于如下函数:

template <typename T>void A::construct(A::pointer p, A::const_reference t) { new ((void*) p) T(t); } template <typename T>void A::destroy(A::pointer p){ ((T*)p)->~T(); }

以上代码中使用了placement new语法,且直接调用了析构函数。

分配器应是可复制构造的,任举一例,为T类对象而设的分配器可由另一为U类所设的分配器构造。若某分配器分配了一段存储空间,则这段存储空间只能由与该分配器等价的分配器解除分配。分配器还需要提供一个模板类成员函数template <typename U> struct A::rebind { typedef A<U> other; };,以模板 (C++)参数化的方式,借之来针对不同的数据类型获取不同的分配器。例如,若给定某一为整型(int)而设的分配器IntAllocator,则可执行IntAllocator::rebind<long>::other以获取对应长整型(long)的相关分配器。实际上,stl::list<int>实际要分配的是包含了双向链表指针的node<int>,而不是实际分配int类型,这是引入了rebind的初衷。

与分配器相关联的operator ==,仅当一个allocator分配的内存可以被另一个allocator释放时,上述相等比较算符返回真。operator !=的返回结果与之相反。

1、部件:小桶连接器(板式,井式分配器)、啤酒龙头,啤酒塔,酒矛,啤酒扎啤机,酒标。

2、本产品与啤酒扎啤机、啤酒龙头,啤酒塔,酒矛,制冷机,酒标配套使用,通过小桶连接器和酒矛的作用将啤酒送入啤酒扎啤机,经扎啤机制冷,混合阀阀门打开。打开二氧化碳压力表,使二氧化碳压入酒桶,啤酒从出酒龙头放出。产品设计精湛,摆设大方,文明卫生,使用方便,随时饮用。是酒吧,宾馆,餐厅,客厅等需喝扎啤的理想用品。

3、设计精湛,摆设大方,文明卫生,使用方便,随时饮用。

定义自定义分配器的主要原因之一是提升性能。利用专用的自定义分配器可以提高程序的性能,又或提高内存使用效率,亦或两者兼而有之。默认分配器使用new操作符分配存储空间,而这常利用C语言堆分配函数(malloc())实现。由于堆分配函数常针对偶发的内存大量分配作优化,因此在为需要一次分配大量内存的容器(如矢量、双端队列)分配内存时,默认分配器一般效率良好。但是,对于映射表与双向链表这类需要频繁分配少量内存的容器来说,若采用默认分配器分配内存,则通常效率很低。除此之外,基于malloc()的默认分配器还存在许多问题,诸如较差的引用局部性,以及可能造成内存碎片化。

有鉴于此,在这一情况下,人们常使用基于内存池的分配器来解决频繁少量分配问题。与默认的"按需分配"方式不同,在使用基于内存池的分配器时,程序会预先为之分配大块内存(即"内存池"),而后在需要分配内存时,自定义分配器只需向请求方返回一个指向池内内存的指针即可;而在对象析构时,并不需实际解除分配内存,而是延迟到内存池的生命周期完结时才真正解除分配。

在"自定义分配器"这一话题上,已有诸多C++专家与相关作者参与探讨,例如斯科特·梅耶斯的作品《Effective STL》与安德烈·亚历山德雷斯库的《Modern C++ Design》都有提及。梅耶斯洞察到,若要求某一分配器的所有实例等效,则可移植的分配器必须不包含状态。虽然C++标准鼓励库的实现者支持带状态的分配器,但梅耶斯称,相关段落是"(看似)美妙的观点",但也几乎是空话,并称分配器的限制"过于严苛"。

另外,在《C++程序设计语言》中,比雅尼·斯特劳斯特鲁普则认为"'严格限制分配器,以免各对象信息不同',这点显然问题不大"(大意),并指出大部分分配器并不需要状态,甚至没有状态时性能反倒更佳。他提出了三个自定义分配器的用例:内存池型的分配器、共享内存型分配器与垃圾回收型分配器,并展示了一个分配器的实现,此间利用了一个内部内存池,以快速分配/解除分配少量内存。但他也提到,如此优化可能已经在他所提供的样例分配器中实现。

自定义分配器的另一用途是调试内存相关错误。若要做到这一点,可以编写一个分配器,令之在分配时分配额外的内存,并借此存放调试信息。这类分配器不仅可以保证内存由同类分配器分配/解除分配内存,还可在一定程度上保护程序免受缓存溢出之害。

使用方法

当初始化标准容器时,若需使用自定分配器,则可将其写入模板参数,以代替默认的std::allocator<T>,如下所示:

namespace std { template <class T, class Allocator = allocator<T> > class vector;// ...

正如其他所有C++类模板般,在初始化同一标准库容器时,若使用了不同的分配器,则所生成容器的类型亦不同。譬如,若函数需一整型矢量数组std::vector<int>作为参数,则其只能接受由默认分配器生成的整型矢量数组。

C++11

通过加入"作用域"分配器,C++11标准进一步强化了分配器接口,从而保证带有嵌套式内存分配特点的容器(如字符串矢量数组等)所分配到的内存皆来自容器自身的分配器。

另外,C++11标准删除了"给定类型的分配器在比较时总是相等"的模棱两可的要求,使带状态分配器不仅实用性得到提升,而且可管理进程外的共享内存。现今分配器的作用多为让程序员可以控制容器的内存分配,而非适应基底硬件的地址模型。事实上,C++11标准删去了分配器"自适应地址模型"的功能,结果抹消了其设计初衷。

分配器文献

分配器型号 分配器型号

格式:pdf

大小:496KB

页数: 2页

评分: 4.3

杰士美 (JESMAY)系列产品 >> 分支分配器 >> 室内型分配器 ★ 锌合金压铸外壳,表面镀锡处理。 ★ 采用全锡封方式, 屏蔽度:5-1000MHz ≥100dB。 ★ 体积小,重量轻。 ★ 微带电路设计,性能指标优。 ★ 安装简单,两边孔位用来固定主体。 ★ 表面喷漆处理,防氧化、不变色。 ▲ 技术指标 型号 2772S 2773S 2774S 2776S 2778S 插入损耗 IN-OUT (dB) 4-40 MHz 3.5 6.0 7.0 9.0 10.5 40-550 MHz 3.6 6.0 7.0 9.5 10.5 550-750 MHz 3.8 6.5 7.5 10.0 12.0 750-1000 MHz 4.0 6.8 8.3 10.5 12.5 相互隔离 度 OUT-OUT (dB) 5-40 MHz 30 25 27 25 25

立即下载
功率分配器设计 (2) 功率分配器设计 (2)

格式:pdf

大小:496KB

页数: 5页

评分: 4.3

功率分配器设计 (2)

立即下载

HDMI系列分配器是多端口输出的 HDMI 分配器。可以将输入的 HDMI 信号分配成多路一致、同步的 HDMI 号输出。并且具有信号缓冲、放大能力,因此对于输入的 HDMI 信号,可以通过串接多个分配器的方法实现超过 15 米的远距离传输(扩展);用户还可以通过堆叠多个分配器的方法来提高 HDMI 输出端口的数量。

HDMI系列分配器主要应用在HDTV、数字机顶盒、DVD、投影机的测试、零售、展示方面;数据中心控制;信息分配;会议室演示;教学环境和培训场所等对噪声、传输距离及安全有限制要求的领域。

av分配器参数

AV分配器参数如下:

1路-4路数据分配器(如74LS139)、1路-8路数据分配器(74LS138)等。

分配器相关推荐
  • 相关百科
  • 相关知识
  • 相关专栏