gpt4 book ai didi

c - 从 c 程序中确定 TASK_SIZE

转载 作者:太空狗 更新时间:2023-10-29 11:07:58 25 4
gpt4 key购买 nike

TASK_SIZE 是一个内核常量,它定义了工作在最低权限级别的代码的可访问内存的上限。

在物理内存小于 1GB 的系统上,其值通常设置为 0xc0000000(本文中的所有示例均引用该值)。超出此限制的内存包含内核代码。

有没有办法通过c程序确定正在运行的内核TASK_SIZE??

TASK_SIZE

最佳答案

经过大量的google搜索和分析,我得到了一个逻辑

假设网络虚拟地址为4gb,按1:3比例划分。

粗略的假设:-

内核(上 1 GB):c0000000 -ffffffff

用户空间(3gb以下):0-c0000000

   #define GB *1073741824
unsigned int num;
unsigned int task_size;
task_size=(unsigned)&number+ 1 GB / 1 GB * 1GB;

[进程的栈区会分配在内核空间下面]

所以 num 的地址(在堆栈中)= 3 GB 范围内的某处,例如:[3214369612]

现在增加 1 GB = 1073741824+3214369612=4288111436

除以 1GB=3.993614983 就是 3 (unsigned int)

现在乘以 1GB = 3 *1073741824 = 3221225472 即(十六进制的 0xC0000000)

因此我得到了内核起始地址(TASK_SIZE)

我也假设 (2:6) 比例进行了尝试,并得到了正确的结果。

这个逻辑合理吗,求评论???

关于c - 从 c 程序中确定 TASK_SIZE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35480116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com