关于BoringSSL的OPENSSL_malloc两处代码逻辑的技术疑问
BoringSSL OPENSSL_malloc 代码疑问解析
关于if (size + OPENSSL_MALLOC_PREFIX < size)的作用
别被OPENSSL_MALLOC_PREFIX=8的固定值迷惑——这个判断绝非“永不为真”。
因为size是无符号整数类型(size_t),当size接近系统SIZE_MAX(无符号整数的最大值)时,size + 8会触发无符号整数溢出。无符号溢出会绕回成极小值,此时size + 8 < size的条件就会成立。
这段代码是用来检测内存分配的溢出风险:如果用户传入的size大到加上前缀长度就溢出,说明实际所需内存已超出系统可分配的最大值,提前触发这个判断就能避免后续分配出错误的内存块。
注释中链接器与优化相关内容的含义
“the tag being discarded by the linker”
这里的“tag”指代码中用于内存检测(比如越界追踪、分配标记)的全局符号。链接器在优化阶段会自动丢弃它判定为“未被使用”的符号,若这个tag被丢弃,对应的内存检测逻辑就会失效,所以代码需要做特殊处理阻止链接器的这个行为。
“optimising away the reference at the time of writing”
这说的是编译器的编译优化行为:如果编译器分析代码时,认为某个符号的引用没有实际作用,就会直接把该引用优化掉,导致链接器看不到这个符号的使用痕迹,最终还是会出现“标签被丢弃”的问题。那段看似奇怪的代码(包括这个溢出判断)就是为了给编译器传递“该符号确实被用到”的信号,防止必要的引用被优化掉,保证内存检测机制正常工作。
内容的提问来源于stack exchange,提问作者gmmk
相关产品推荐
相关产品推荐

