首页
学习
活动
专区
圈层
工具
发布

C++ 中文周刊 2024-05-04 第156期

(buf); if (p->x == 0) { // ... } } 这段代码是UB,主要问题是buf不能保证活着,所以通常有一种转移大法 void foo...就比如说我作为写代码的人我确认这段buf绝对是活的,start_lifetime_as void foo(unsigned char* buf, size_t len) { assert(len...new分配了空间(1)然后**构造了对象(2)**,malloc没有构造 实际上从构造的那一刻开始 new还生成了一个活的对象,开始了一个对象的生命周期 start lifetime(3) 那对于placement...和 reinterpret_cast 实际上reinterpret_cast就是过于强了 对于只读的这么玩只要作者能保证buffer没问题UB也就UB了对付用 但是reinterpret_cast不能保证对应的...buffer是不是活的,而从c来的语法,malloc就直接用了,根本就没有UB这一说 struct X { int a, b; }; X *make_x() { X *p = (X*)malloc

17010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频采样数据 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )

    , // 编码后的 AAC 格式音频输出缓冲区 mMaxOutputBytes); // 输出缓冲区最大字节大小 二、 封装 RTMP 音频数据头 ---- 1 ...., 类型是 01 , 如果是 AAC 解码信息 , 类型是 00 ; 这里是 01 类型 , AAC 音频采样数据 ; // 编码出的声音 都是 0x01, 本方法是对音频数据进行编码的方法, 头信息肯定是...2 字节数据是 AF 01 ; // 拷贝 AAC 音频数据到 RTMPPacket 数据包中 memcpy(&rtmpPacket->m_body[2], mFaacEncodeOutputBuffer...AAC 格式音频输出缓冲区 unsigned int bufferSize : 输出缓冲区最大字节大小 返回值 : 编码后的数据字节长度 */ int..., // 编码后的 AAC 格式音频输出缓冲区 mMaxOutputBytes); // 输出缓冲区最大字节大小 // 组装 RTMP 数据包 if (encodeAacDataByteCount

    1.8K20

    C++11 std::uninitialized_copy_n 原理与实现

    与普通的std::copy_n不同,该函数直接在未初始化的内存上构造对象,避免了"先构造后赋值"的额外开销,尤其适用于需要手动管理内存的底层代码。...ForwardIt:目标迭代器类型,需满足ForwardIterator要求,且必须是NoThrowForwardIterator(即迭代器的递增、赋值等操作不允许抛出异常)参数与返回值first:源序列的起始迭代器...的核心设计思想是"在未初始化内存上直接构造对象",这与C++的对象生命周期管理模型密切相关。...迭代器与范围要求目标迭代器指向的内存必须足够容纳count个元素源范围[first, first + count)必须是有效的C++20明确规定源和目标范围重叠为未定义行为(UB),即使在C++11中也应避免...std::uninitialized_copy_n通过直接在未初始化内存上构造对象,实现了高效的内存操作,是C++内存模型中"分离内存分配与对象构造"思想的重要体现。

    14100

    快报!c++26 最新进展!Hagenberg会议!

    :resize之类的函数就可以将元素数组整体memcpy过去而不是一个个移动了。...在强化实现中,标准库中的各个operator[]和其他常见函数将会使用Contracts强制检查参数没有出界,从而能够有效避免一些最常见的越界UB的发生。...和P2900结合,这两个提案是对近期爆发的对C++安全性的批评的有力回应。在P3100/P3599得到实现后,在语言和库方面我们终于对于常见UB有了有效的解决方案。...在各特性的进展方面,这次会议是Stage 2 -> 3的deadline,现在还没forward的就都被推迟到29周期去了。...除此之外,BS和HS提出的重量级安全特性Profiles(其实就是写[[profiles::enforce(xxx)]]然后禁掉一些不安全特性,reinterpret_cast之类的)在讨论了一天半之后最终决定不进入

    43500

    高效内存位操作:如何用C++实现数据块交换的性能飞跃?

    原始实现方案可能是这样的:void naive_swap(char* data, size_t len) { const size_t group_size = 8; for (size_t...但当我们在1GB数据上测试时,发现耗时竟高达127ms!...性能深潜:揭开内存操作的面纱内存访问的三重代价延迟惩罚:CPU访问内存比访问寄存器慢100倍以上带宽限制:DDR4的理论带宽为25.6GB/s(双通道)指令开销:每次memcpy都隐含函数调用成本原始方案的性能缺陷...6次内存操作/组:3次读+3次写栈空间震荡:频繁创建4字节临时变量指令流水线中断:memcpy的库函数调用性能突破:从编译器视角重构代码方案一:指针魔法void pointer_swap(uint64_...:内存子系统特性决定上限量化分析:拒绝"我觉得",用数据说话层层递进:从算法到指令级优化平衡艺术:在可维护性与性能间寻找甜蜜点"过早优化是万恶之源,但适时优化是成功之匙" —— Donald Knuth

    27610

    听说有人想要爱奇艺面经?

    A:知道啊…(不是很懂想要考察什么) Q:写个strcpy A:……撸代码(PS铅笔写代码用着就是舒服) Q:C语言的memcpy用过吗?...(笑)经常用是吧 A:嗯…… Q:你知道对memcpy(a, a 3, 6)这样的代码怎么处理的吗? A:这是ub吧……讲道理应该不能这么用,用restrict关键字限定了的吧?...Q:其实他是有做处理的,你有了解吗? A:并木有… Q:有做过高并发的处理吗? A:没有这样的场景,没做过,只看过相关的东西。 Q:看过什么?...Q:虚函数是怎么实现的? (忽然懒得写回答了,师兄就在我后面干活,我就摸鱼写面经好像不太好,速战速决吧XD答案大家可以自行讨论XD) Q:析构函数可以是虚函数吗? Q:析构函数是虚函数的好处是啥?...当然是不能用的(我:确实用了就没啥意思了。。) Q:指针和引用区别是啥?你在什么场景下用引用?指针呢? Q:select和epoll区别? Q:select就一点应用场景都没有吗?

    95600

    获取CPU型号和序列号

    主要参考文章:关于CPU序列号的问题,以及如何获取×64下CPU的ProcessorID_fudong071234的博客-CSDN博客前几天经过查资料,得到网络上获取CPU序列号的方法是错误的,首先我找到了一篇论文...,这篇论文里面是这么说的:这篇论文是错误的。...这篇是错误的这篇是错误的!!!!!!!!!2、CPU序列号CPU序列号是一个建立在处理器内部的、唯一的、不能被修改的编号。它由96位数字组成。高32位是CPUID,用来识别CPU类型。...interArray[3], data_[1].interArray[0]); string strRet = vendor_serialnumber; return strRet; } 上述两个函数是在微软那个例子基础上改动的...,我在32位程序中测试了,与之前使用汇编的那种代码获取到的结果是一样的。

    5.9K20

    ringbuffer是什么_Buffer

    Ring Buffer的高级用法(类似内核KFIFO) 环形缓冲区(ring buffer),环形队列(ring queue) 多用于2个线程之间传递数据,是标准的先入先出(FIFO)模型。...数据结构 数据结构中定义的缓存区大小一定要是2的n,当然也可以用动态分配来分配缓存区的大小,但是使用该高级用法一定要遵循分配的缓存区大小是2的n次方; #define MIN(a, b) (((a) 的大小, 先说明数据结构定义时为什么要要求指针和大小的数据类型一定要为unsigned,因为在 本高级用法中,没有用size的大小限制指针的大小的,入指针与出指针的大小均可以达到对于数据大小的最大值,...而当使用的size大小为2的7次方,也就是128时,size的也是可以整除unsigned char可以数据范围个数的, 所以unsigned char的是任一个数对size可以取余都会落在每一个直接所对应的所有上...更重要的是,在向缓冲区中写数据时,只需要判断一次是否有空闲块并获取其块首指针就可以了,从而减少了重复性的条件判断,大大提高了程序的执行效率;同样在从缓冲队列中读取数据时,也是一次读取10字节的数据块,同样减少了重复性的条件判断

    2.1K40

    Apple 操作系统可执行文件 Mach-O

    通过学习 Mach-O,可以了解应用程序是如何加载到系统的,如何执行的。还能了解符号查找,函数调用堆栈符号化等。更重要的是能够了解如何设计数据结构,这对于日后开发生涯的收益是长期的。...由于地址已经在 la_symbol_ptr 里了,所以再访问符号时会通过 stub 的 jum 指令直接跳转到真实地址。...通过构建时的选项设置,dyld 可以即时绑定,也叫延迟绑定,首次使用引用时的绑定,在使用符号前不会将程序的引用绑定到共享库的符号。...代码上可以写判断,如果引用为空进行相应的处理。 过程链接表 PLT,会在运行时确定函数地址。...将可见性属性放置在实现文件中的符号定义里,设置符号可见性也能够更精确的控制哪些符号是公共符号还是私有符号。在编译选项 -fvisbility 可以指定未指定可见性符号的可见性。

    3.3K10

    ringbuffer是什么_drum buffer rope

    Ring Buffer的高级用法(类似内核KFIFO) 环形缓冲区(ring buffer),环形队列(ring queue) 多用于2个线程之间传递数据,是标准的先入先出(FIFO)模型。...数据结构 数据结构中定义的缓存区大小一定要是2的n,当然也可以用动态分配来分配缓存区的大小,但是使用该高级用法一定要遵循分配的缓存区大小是2的n次方; #define MIN(a, b) (((a) 的大小, 先说明数据结构定义时为什么要要求指针和大小的数据类型一定要为unsigned,因为在 本高级用法中,没有用size的大小限制指针的大小的,入指针与出指针的大小均可以达到对于数据大小的最大值,...而当使用的size大小为2的7次方,也就是128时,size的也是可以整除unsigned char可以数据范围个数的, 所以unsigned char的是任一个数对size可以取余都会落在每一个直接所对应的所有上...更重要的是,在向缓冲区中写数据时,只需要判断一次是否有空闲块并获取其块首指针就可以了,从而减少了重复性的条件判断,大大提高了程序的执行效率;同样在从缓冲队列中读取数据时,也是一次读取10字节的数据块,同样减少了重复性的条件判断

    1.3K20

    C++ 中文周刊 2024-11-16 第172期

    基础上增加了noblocking noallocating 更准确分析函数行为,可以配合之前介绍的RealTimeSan使用 主要问题是函数指针不行,函数指针/function自动丢弃上述属性 另外存在属性覆盖...idiom https://andreasfertig.blog/2024/11/unique_ptr-and-the-pointer-to-implementation-idiom/ 当实现pimpl惯用法的时候...,使用unique_ptr通常因为看不到完整实现(析构)调用失败 作者给的办法是手动加上deleter 不要听他的,直接用shared_ptr,不要多此一举好吧 • What is the current...for (int i = 0; i < N; ++i) { std::cin >> elements[i]; } return contains(5); } 存在越界 -> 越界是UB...(int k = 0; k <= N; ++k) { printf("k is %d\n",k); decade[k] = -1; } } k越界,越界是UB,编译器认为代码中没有

    18300

    监视的最低点(4)

    剪贴板 有趣的是,由于某种原因没有使用剪贴板监视的完整实现。剪贴板检查对于通过复制其他作业中的元素来捕捉学生在考试中剽窃是绝对显而易见的。...根据他们的网站,任何因任何原因无法使用相应软件的学生,无论是不兼容还是软件问题,都可以在“严格监督”下参加考试,这使得懒惰绕过超级容易:从您的机器中删除其依赖项并且它将无法运行 :) 部署依赖于ClickOnce...但是告诉你这将是一个非常无聊的结论,所以我们决定编写一个完整的原生绕过,本质上是一个 x86 用户模式 rootkit,来隐藏你在考试中使用的任何厚颜无耻的网站。你可能会问,我们为什么要这样做?...截图 屏幕截图由Graphics.CopyFromScreen.NET 函数管理,它本质上是一个位块传输包装器,内部调用 gdi32!BitBlt。...正如我们在视频游戏中为防止反作弊软件截屏所做的那样,我们可以在执行截屏之前挂钩 BitBlt 并隐藏任何不需要的信息。

    4.7K260

    C++ 中文周刊 第104期

    已经提及过很多次,性能专家 std::from_chars已经要比strtod快很多倍了,作者的fast_float比std::from_chars还快 (前身是fast_double_parser,没切的建议切过去...,API和std::from_chars相同) 这篇文章是案例顺带压测一下速度。...✓ ✓ std::copy_n N/A N/A ✓ UB UB ✓ std::copy_backward N/A N/A ✓ ✓ UB ✓ cstring memcpy ✓ UB ✓ UB UB...看不懂 Idioms for Polymorphism and Templates 一些模版技巧介绍 CRTP没人不知道吧,想想enable_shared_from_this overload用法,也就这么个例子...建议执行单测可以前面加上这个跑,每次统计测试运行时间长短,来分析代码哪里引入问题,这也是一个有趣的思路 总之测试压测之类的数据,都是有用的 代码分析慢的地方是结构体比较 opetator==慢了。

    52230

    【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | DexFile.java 对应的 dalvik_system_DexFile.cc 本地函数分析 )

    中 ; 1、dalvik_system_DexFile.cc 的 DexFile_createCookieWithDirectBuffer 函数 在 DexFile_createCookieWithDirectBuffer...函数中 , 调用的 memcpy 方法中的 dex_mem_map->Begin() 就是 dex 文件的起始地址 , length 是 dex 文件的长度 , 这里可以将内存中的 dex 数据导出...; // ★ 此处的 dex_mem_map->Begin() 就是 dex 文件的起始地址 , length 是 dex 文件的长度 memcpy(dex_mem_map->Begin(),...dex_mem_map->Begin() 就是 dex 文件的起始地址 , length 是 dex 文件的长度 memcpy(dex_mem_map->Begin(), base_address,...CreateSingleDexFileCookie 函数 ---- 在该方法中 , 主要创建 dex_file 实例 , 然后将该实例对象返回到 Java 层 ; 传入的参数是 CreateDexFile

    49210

    【OpenGL】十三、OpenGL 绘制三角形 ( 绘制单个三角形 | 三角形绘制顺序 | 绘制多个三角形 )

    , 三个点可以唯一确定一个面 , 四个点及多个点组成的多边形 , 不一定是一个面 ; 绘制三角形面时 , 在 glBegin 方法中传入 GL_TRIANGLES 参数 , 然后在 glBegin 和...A 透明度 // 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置线的宽度...// 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置线的宽度 glLineWidth...0.0f, -10.0f); 上述三个点是按照顺时针顺序排列的 ; 三、绘制多个三角形 ---- 绘制多个三角形时 , 在 glBegin 和 glEnd 之间设置多个三角形点即可 , 系统会按照从上到下...// 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置线的宽度 glLineWidth

    3.1K00
    领券