c++ - 与“未初始化的堆栈指针”冲突
问题描述
我最近被告知,MSVC 的未初始化堆栈内存的调试模式标记是 0xCCCCCCCC。我现在很担心;虽然不太可能,但如果 malloc()/new/any 指针巧合地作为 this 指针结束会发生什么?它会抛出错误吗?这会导致重要系统出现问题吗?
解决方案
malloc
标准要求适当对齐以存储任何类型的变量并new
返回适当对齐的指针,以便可以将其转换为任何完整对象类型的指针。
0xCCCCCCCC
有2^2
它的因式分解,这意味着最高对齐是 4 字节对齐(它不能被 8 整除)。所以在 MSVC 中的 x86 上(其中long long
是 8 个字节)malloc
并且new
永远不会返回0xCCCCCCCC
.
这是我想到的,我相信还有更多的故事。
推荐阅读
- java - java复杂的if语句导致StackOverflowError
- python - 如何在 python 脚本中解析列格式的文本以提供特定的输出
- mysql - 我可以在 MariaDB 10.2.16 LongText 列中使用 Laravel JSON Where 子句吗?
- php - PHP 从 POST 中的表单中获取一个值,该表单具有来自 PHP 脚本的值
- python - Discord.py AttributeError:“上下文”对象没有属性“服务器”
- symfony - Symfony 4,以实体属性作为数组键的 findAll
- mysql - MySQL A 或 B 但不是两者
- php - 是什么让数组变量改变了它的值,即使它是由 val 分配的,而不是引用
- sql - Clickhouse:如何将日期转换为长整数?
- c# - Nancy 模型绑定到子类。自动检测?