首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Gnep's_Technology_Blog

    GNU Radio之OFDM Carrier Allocator底层C++实现

    一、OFDM Carrier Allocator 简介 OFDM Carrier Allocator:OFDM 子载波分配模块,也即串并转换模块。 1、make 函数 ofdm_carrier_allocator_cvc::sptr ofdm_carrier_allocator_cvc::make( int fft_len, const 智能指针 返回值是 ofdm_carrier_allocator_cvc::sptr,即指向 ofdm_carrier_allocator_cvc 的智能指针。 ofdm_carrier_allocator_cvc_impl::ofdm_carrier_allocator_cvc_impl( // 参数说明: int fft_len, ofdm_carrier_allocator_cvc_impl::~ofdm_carrier_allocator_cvc_impl() {} 三、OFDM 数据格式 经过子载波分配模块和 IFFT 后的

    71820编辑于 2024-03-28
  • 来自专栏C++

    深入解析 C++20 中的 std::pmr::polymorphic_allocator

    一、引言C++20 引入了 std::pmr::polymorphic_allocator,这是一个功能强大的内存分配器,它允许在运行时动态选择内存分配策略。 与传统的静态分配器(如 std::allocator)不同,std::pmr::polymorphic_allocator 依赖于 std::pmr::memory_resource,通过运行时多态性来管理内存分配 这种灵活性使得 std::pmr::polymorphic_allocator 成为管理内存分配的有力工具,尤其是在需要动态调整内存分配策略的场景中。 二、std::pmr::polymorphic_allocator 的特性1. 多态分配行为std::pmr::polymorphic_allocator 的核心特性是其多态分配行为。 动态内存分配策略std::pmr::polymorphic_allocator 的多态特性使其成为实现动态内存分配策略的理想选择。

    46310编辑于 2025-03-31
  • 来自专栏C++

    深入探索 C++20 中的 std::make_obj_using_allocator

    一、引言C++20 标准引入了众多新特性,其中 std::make_obj_using_allocator 是一个值得关注的工具函数。 二、std::make_obj_using_allocator 的定义与用法std::make_obj_using_allocator 的模板定义如下:template<class T, class Alloc 该函数通过使用分配器构造(uses-allocator construction)来创建指定类型 T 的对象。 main() { // 使用默认分配器创建对象 auto vec1 = std::make_obj_using_allocator<std::vector<int>>(std::allocator 四、std::make_obj_using_allocator 的优势1.

    21700编辑于 2025-03-27
  • 【C++特殊工具与技术】优化内存分配(二):allocator

    一、allocator 基础:内存分配与对象构造的分离 1.1 allocator 的核心接口 allocator是一个模板类,定义在头文件<memory>中,其核心接口如下表所示: 成员函数 功能描述 使用allocator可以完美解决这些问题。 4.2 自定义 allocator 的关键要求 自定义 allocator 需要满足以下条件(参考 C++ 标准的Allocator requirements): 是一个模板类,接受类型参数T; 提供value_type 五、避坑指南:allocator 使用中的常见错误 5.1 未正确构造 / 销毁对象 错误示例: std::allocator<int> alloc; int* p = alloc.allocate( 5.4 自定义 allocator 的线程安全 错误示例:自定义 allocator 的allocate/deallocate函数未加锁,多线程环境下导致空闲链表混乱。

    13710编辑于 2026-01-21
  • 来自专栏C++

    C++17中std::pmr::memory_resource和std::polymorphic_allocator详解

    在C++17标准中,引入了std::pmr::memory_resource和std::polymorphic_allocator这两个强大的组件,它们为内存分配提供了高度的灵活性和可扩展性,使得开发者能够根据不同的应用场景和需求 二、std::polymorphic_allocator(一)基本概念std::polymorphic_allocator是一个多态分配器,它允许用户指定不同的std::pmr::memory_resource 这意味着std::polymorphic_allocator可以根据需要分配不同类型的元素,并且可以使用不同的内存资源来完成分配操作。 三、总结std::pmr::memory_resource和std::polymorphic_allocator是C++17中引入的重要内存管理工具,它们为内存分配提供了更高的灵活性和统一性。 总之,std::pmr::memory_resource和std::polymorphic_allocator为C++开发者提供了强大的内存管理能力,值得在实际项目中深入应用和探索。

    96800编辑于 2025-02-02
  • 来自专栏开发与安全

    从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)

     object for values }; 为了理解_Alty 的类型,还得看一下allocator模板类: template<class _Ty> class allocator {     template <> class _CRTIMP2_PURE allocator<void>     {         // generic allocator for type void     public:           allocator <_Other>             typedef allocator<_Other> other;         };         ....     };     . <int>,由vector 类传递给 基类_Vector_val,则_Alloc 即 allocator<int> ;可以看到 allocator<void> 是allocator 模板类的特化 , rebind<_Ty> 是成员模板类,other是成员模板类 中自定义类型,_Ty 即是int , 那么other 类型也就是allocator<int>, 也就是说_Alty 是类型 allocator

    1.7K00发布于 2017-12-25
  • 来自专栏饶文津的专栏

    Mac 使用 OpenMP/Clang

    <int> >, std::__1::allocator<std::__1::vector<int, std::__1::allocator<int> > > >::allocate(unsigned <int> >, std::__1::allocator<std::__1::vector<int, std::__1::allocator<int> > > >::allocate(unsigned 1::allocator<int*>&>::__split_buffer(unsigned long, unsigned long, std::__1::allocator<int*>&) in seq <int> >, std::__1::allocator<std::__1::vector<int, std::__1::allocator<int> > > >::allocate(unsigned ::__1::vector<int, std::__1::allocator<int> >, std::__1::allocator<std::__1::vector<int, std::__1::allocator

    2.3K40发布于 2020-05-31
  • 来自专栏C++知识总结

    C++ 使用 rapidjson 生成 json 并解析

    Allocator > & name, GenericValue< Encoding, Allocator > & value, Allocator & allocator ) length, Allocator & allocator ) 函数参数 s 是原字符串 length 是原字符串的长度,包括后面的空字符 allocator 分配器 代码 #include ) { d.AddMember("digit", 3, allocator); // 添加整型数据 d.AddMember("height", 170.5, allocator) ("weight", 95, allocator); d.AddMember("info", valueObject, allocator); } //----------------------- ("difficulty", "easy", allocator); } valueObjectArray.PushBack(valueSingleObject, allocator); }

    4.7K30发布于 2019-11-06
  • 来自专栏机器人课程与技术

    关于“ROS2 Topic-Statistics-Tutorial编译出错”的思考2

    [with _Alloc = std::allocator<std::allocator<const std_msgs::msg::String_<std::allocator<void> >&> >; [with _Alloc = std::allocator<std::allocator<const std_msgs::msg::String_<std::allocator<void> >&> >; [with _Alloc = std::allocator<std::allocator<const std_msgs::msg::String_<std::allocator<void> >&> >; <std::allocator<const std_msgs::msg::String_<std::allocator<void> >&> >; _Args = {std::allocator<void [with _Alloc = std::allocator<std::allocator<const std_msgs::msg::String_<std::allocator<void> >&> >;

    1.4K30编辑于 2022-05-01
  • 来自专栏技术随笔心得

    【栽了】迄今为止吐槽最多的标准库函数

    ::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::__cxx11::regex_traits ::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::__cxx11::regex_traits ::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::__cxx11::regex_traits ::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::__cxx11::regex_traits ::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::__cxx11::regex_traits

    71210编辑于 2023-06-13
  • 来自专栏光城(guangcity)

    STL 设计之 EBO(空基类优化)

    <_Tp> __gnu_cxx::bitmap_allocator<_Tp> __gnu_cxx::bitmap_allocator<_Tp> __gnu_cxx::__mt_alloc<_Tp> __ 举例: template<typename _Tp> class allocator: public __allocator_base<_Tp> { template<typename _Tp1> std::allocator<_Tp> __gnu_cxx::bitmap_allocator<_Tp> __gnu_cxx::bitmap_allocator<_Tp> __gnu_cxx::__mt_alloc <<sizeof(std::allocator<int>)<<" "<<sizeof(std::allocator<int>::rebind<int>::other)<<endl; cout<< sizeof(__gnu_cxx::bitmap_allocator<int>)<<" "<<sizeof(__gnu_cxx::bitmap_allocator<int>::rebind<int>::

    2.3K20发布于 2019-10-24
  • 来自专栏后端

    基于RocksDB编写一个简单的SQL数据库|得物技术

    表示可以为null allocator: std.mem.Allocator, pub fn init(allocator: std.mem.Allocator) SelectAST { : std.mem.Allocator, pub fn init(allocator: std.mem.Allocator) InsertAST { return .{ : std.mem.Allocator, pub fn init( allocator: std.mem.Allocator, name: []const u8, pub fn init(allocator: std.mem.Allocator, table: Table) Self { return Self{ .allocator : std.mem.Allocator, table: Table, fn init( allocator: std.mem.Allocator, db: Rocksdb

    42900编辑于 2024-12-20
  • 来自专栏MySQL修行 | 老叶茶馆

    ClickHouse和他的朋友们(2)MySQL Protocol和Read调用栈

    <char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator <char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator <char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator <char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const

    85631发布于 2020-10-22
  • 来自专栏瓜农老梁

    Netty13# 池化内存分配器

    PoolAreana(堆外内存)个数默认为核数的2倍,堆外内存,可以通过-Dio.netty.allocator.numDirectArenas指定 DEFAULT_PAGE_SIZE 默认pageSize =8K,可以通过-Dio.netty.allocator.pageSize,需大于4096且为2的倍数 DEFAULT_MAX_ORDER 二叉树最高层数,取值范围为0~14,默认为11,可以通过-Dio.netty.allocator.maxOrder ,可以通过-Dio.netty.allocator.cacheTrimInterval指定 DEFAULT_CACHE_TRIM_INTERVAL_MILLIS 默认0不开启,定时释放内存池,可以通过- Dio.netty.allocator.cacheTrimIntervalMillis指定 DEFAULT_USE_CACHE_FOR_ALL_THREADS 默认true,使用线程缓存,可以通过-Dio.netty.allocator.useCacheForAllThread DEFAULT_NUM_HEAP_ARENA通过-Dio.netty.allocator.numHeapArenas自定义;DEFAULT_NUM_DIRECT_ARENA通过-Dio.netty.allocator.numDirectArenas

    1.3K20发布于 2021-03-16
  • 来自专栏haifeiWu与他朋友们的专栏

    Netty源码中对Redis协议的实现

    private static void writeInlineCommandMessage(ByteBufAllocator allocator, InlineCommandRedisMessage msg , List<Object> out) { writeString(allocator, (), out); } private static void writeString(ByteBufAllocator allocator, RedisMessageType type , BulkStringHeaderRedisMessage msg, List<Object> out) { final ByteBuf buf = allocator.ioBuffer , ArrayHeaderRedisMessage msg, List<Object> out) { writeArrayHeader(allocator, msg.isNull(),

    1.1K20发布于 2018-09-11
  • 来自专栏haifeiWu与他朋友们的专栏

    Netty 源码中对 Redis 协议的实现

    private static void writeInlineCommandMessage(ByteBufAllocator allocator, InlineCommandRedisMessage msg , List<Object> out) { writeString(allocator, (), out); } private static void writeString(ByteBufAllocator allocator, RedisMessageType type , BulkStringHeaderRedisMessage msg, List<Object> out) { final ByteBuf buf = allocator.ioBuffer , ArrayHeaderRedisMessage msg, List<Object> out) { writeArrayHeader(allocator, msg.isNull(),

    1.2K50发布于 2018-08-10
  • 来自专栏用户2442861的专栏

    rapidJson 的使用

    rapidjson::Document document; document.SetObject(); rapidjson::Document::AllocatorType& allocator ); object.AddMember("name", "test", allocator); object.AddMember("version", 1.01, allocator ); object.AddMember("vip", true, allocator); object.SetInt(i); array.PushBack (object, allocator); } document.AddMember("title", "PLAYER INFO", allocator); document.AddMember ); root.AddMember("gold",1234,allocator); rapidjson::StringBuffer buffer; rapidjson::Writer

    3.2K30发布于 2018-09-20
  • 来自专栏虚拟技术学习

    C++学习笔记-分配器,基础学习

    一、allocator必要接口 /* * allocator::value_type * allocator::pointer * allocator::const_pointer * allocator ::reference * allocator::const_reference * allocator::size_type * allocator::difference_type * allocator ::rebind:一个嵌套的class template, 拥有唯一成员other * allocator::allocator():默认构造函数 * allocator::allocator(const allocator&):拷贝构造 * allocator::~allocator() * pointer allocator::address(reference x) 返回某个对象的地址,相当于 &x * const_pointer allocator::address(const_reference x) 返回某个const对象的地址 * pointer allocator::allocate

    70030发布于 2021-05-06
  • 来自专栏光城(guangcity)

    STL 源码剖析之动态数组 vector

    <_Tp> 继续到allocator_traits中寻找 找到了: template<typename _Up> using rebind_alloc = allocator<_Up>; 于是 : std::allocator_traits<_Alloc>::template rebind_alloc<_Tp> 等价于: allocator<_Tp> ★小结 ” typedef typename >::pointer pointer; 在allocator_traits中找到下面: /** * @brief The allocator's pointer type <_Tp>存在就是allocator<_Tp>::pointer, 这个看allocator.h源码: typedef _Tp* pointer; 否则为value_type*。 get_allocator() const _GLIBCXX_NOEXCEPT { return allocator_type(_M_get_Tp_allocator());

    1.8K20发布于 2019-10-15
  • 来自专栏游戏开发司机

    C++(STL):33---hash_set、hash_map、hash_multiset、hash_multimap源码剖析

    allocator_type; hasher hash_funct() const { return _M_ht.hash_funct(); } key_equal key_eq() const { return _M_ht.key_eq(); } allocator_type get_allocator() const { return _M_ht.get_allocator(); } public __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a = allocator_type()) : _M_ht { return _M_ht.key_eq(); } allocator_type get_allocator() const { return _M_ht.get_allocator(); } public __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a = allocator_type()) : _M_ht

    2.5K30发布于 2021-02-03
领券