- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在较低的层次上理解 C 如何管理内存。我在网页上找到了一些代码,其目的是教您糟糕的内存管理有多糟糕 - 所以我复制并粘贴了它,并编译了:
int main(int argc, char **argv) {
char *p, *q;
p = malloc(1024);
q = malloc(1024);
if (argc >= 2)
strcpy(p, argv[1]);
free(q);
free(p);
return 0;
}
测试用例是使用通用命令执行的
/development/heapbug$ ./heapbug `perl -e 'print "A"x$K'`
对于$K < 1023
我没想到会出现问题,但是对于$K = 1024
我预计会发生核心转储,但没有发生。长话短说,我开始出现 $K > 1033
的段错误.
两个问题:1)为什么会发生这种情况?2)是否有一个公式可以说明系统的“容忍度”?
最佳答案
当您写入超出分配内存的范围时,您将调用 undefined behavior 。这意味着您无法准确预测程序的行为。它可能会崩溃,可能会输出奇怪的结果,或者可能看起来工作正常。
此外,进行看似无关的更改(例如添加未使用的局部变量或用于调试的 printf 调用)可能会改变未定义行为的表现方式,就像使用不同编译器或相同编译器进行编译一样具有不同的优化设置。
仅仅因为程序可能崩溃并不意味着它会崩溃。
话虽这么说,可能发生的情况与malloc
在您的系统上的实现方式有关。它可能会比对齐和簿记目的所要求的字节多留出几个字节。如果没有积极的优化,这些用于对齐的额外字节可能不会用于其他任何用途,因此您在写入它们时会感到困惑,但是当您写入的字节数超出了 malloc 使用的内部结构时,就会出现问题> 并释放
您损坏的内容。
但同样,您不能依赖这种行为。 C 取决于开发人员是否遵守规则,如果不遵守规则,就会发生不好的事情。
关于c - 为什么堆没有更早损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55752922/
我正在使用 Gunicorn 为 Django 应用程序提供服务,它工作正常,直到我将其超时时间从 30 秒更改为 900000 秒,我不得不这样做,因为我有一个用例需要上传和处理一个巨大的文件(过程
我有一个带有非常基本的管道的Jenkinsfile,它可以旋转docker容器: pipeline { agent { dockerfile { args '-u root' } } stag
在学习 MEAN 堆栈的过程中,我遇到了一个问题。每当我尝试使用 Passport 验证方法时,它都不会返回任何响应。我总是收到“localhost没有发送任何数据。ERR_EMPTY_RESPONS
在当今的大多数企业堆栈中,数据库是我们存储所有秘密的地方。它是安全屋,是待命室,也是用于存储可能非常私密或极具价值的物品的集散地。对于依赖它的数据库管理员、程序员和DevOps团队来说,保护它免受所
是否可以创建像图片上那样的边框?只需使用 css 边框属性。最终结果将是没 Angular 盒子。我不想添加额外的 html 元素。我只想为每个 li 元素添加 css 边框信息。 假设这是一个 ul
我是一名优秀的程序员,十分优秀!