memory-layout相关内容

使用 g++ 编译器打印 C++ 对象的布局

有没有办法使用 g++ 编译器或任何其他方式打印 C++ 对象的布局.一个简化的例子(假设 int 占用 4 个字节) A 类{诠释一个;};B类:公共A{诠释 b;} 所以输出将是 A-0 4+ 一个 +乙-0 4 8+ A.a + b + 了解对象的布局会很有用(在我的例子中是虚拟机代码). 提前致谢. 问候,扎西尔 解决方案 看手册页,-fdump-class-h ..
发布时间:2022-01-23 20:40:53 C/C++开发

Java 8 中是否仍然存在方法区域?

在 Java 8 之前,我们有 5 个主要的运行时数据区: 方法区 堆 JVM 堆栈 PC 寄存器 本机方法堆栈 在 Java 8 中,没有 Perm Gen,这意味着没有更多“java.lang.OutOfMemoryError: PermGen" 这很好,但我也读过 方法区是 Perm Gen 中空间的一部分 但我似乎找不到任何明确说明 Java 8 中不 ..
发布时间:2022-01-16 12:37:03 其他开发

为什么 ELF 入口点 0x8048000 不能用“ld -e"更改?选项?

跟进为什么ELF执行入口点虚拟地址是0x80xxxxx而不是0x0形式的0x0? 和 为什么虚拟内存地址为linux 二进制文件从 0x8048000 开始?,为什么我不能让 ld 使用与 ld -e 的默认入口点不同的入口点? 如果这样做,我会得到一个返回代码为 139 的 segmentation fault,即使对于靠近默认入口点的地址也是如此.为什么? 编辑: 我会让问题 ..
发布时间:2022-01-11 15:30:02 其他开发

为什么 linux 二进制文件的虚拟内存地址从 0x8048000 开始?

在 Ubuntu x86 系统上反汇编 ELF 二进制文件 我不禁注意到 code(.text) 部分从虚拟地址 0x8048000 开始,所有较低的内存地址似乎都未使用. 这似乎相当浪费,所有谷歌出现的要么是民间传说涉及 STACK_TOP 或防止空指针取消引用.后一种情况看起来可以通过使用单个页面而不是留下 128MB 的间隙来修复. 所以我的问题是 - 是否有明确的答案来解释为什 ..
发布时间:2022-01-06 12:42:51 服务器开发

内核空间是否映射到 Linux x86 上的用户空间?

似乎在Windows 32位上,内核会从总共4G的用户虚拟内存空间中预留1G的虚拟内存,并将部分的内核空间映射到这1G空间中. 所以我的问题是: 在 32 位 Linux 上有没有类似的情况? 如果是这样,我们如何才能看到整个内存布局? 我觉得 cat/proc/pid/map 只能看到某个进程的用户空间布局.. 谢谢! 解决方案 其实在 32 位 Windo ..

查找数据段的地址范围

作为一个编程练习,我正在用 C 编写一个标记和清除垃圾收集器.我希望扫描数据段(全局变量等)以获取指向已分配内存的指针,但我不知道如何获取该段的地址范围.我怎么能这样做? 解决方案 Linux(和其他 unix)的文本(程序代码)和数据边界: #include #include /* 这些不在头文件中,并且在某些系统,他们有一个 _ 前置必须输入这些符号以使编译器满意另请查看 brk() ..

是否保证具有相同成员类型的 C 结构在内存中具有相同的布局?

基本上,如果我有 typedef struct {整数 x;输入 y;} 一个;类型定义结构{INT H;国际 k;乙; 而且我有 A a,C 标准是否保证 ((B*)&a)->k 与 ay 相同? 解决方案 是否保证具有相同成员类型的 C 结构在内存中具有相同的布局? 几乎是的.对我来说足够接近了. 来自 n1516,第 6.5.2.3 节,第 6 段: ... ..
发布时间:2021-12-23 16:58:43 其他开发

将结构转换为数组是否合法?

考虑以下事项: //只是一系列相同类型的相邻字段#[repr(C)]#[派生(调试)]结构 S T{在,乙:T,时间:T,d : t,}impl科技{fn new(a : T, b : T, c : T, d : T) ->自己 {自己 {一种,乙,C,d、}}//将其重新解释为数组fn as_slice(&self) ->&[T] {不安全 { std::slice::from_r ..
发布时间:2021-07-13 21:23:42 其他开发

Rust 中精确的内存布局控制?

据我所知,Rust 编译器可以对结构的每个字段进行打包、重新排序和添加填充.如果需要,如何指定精确的内存布局? 在 C# 中,我有 StructLayout 属性,而在 C/C++ 中,我可以使用各种编译器扩展.我可以通过检查期望值位置的字节偏移量来验证内存布局. 我想使用自定义着色器编写 OpenGL 代码,这需要精确的内存布局.有没有办法在不牺牲性能的情况下做到这一点? 解决 ..
发布时间:2021-07-13 21:08:21 其他开发

带有原始类型的单个数组成员的标准布局结构的有保证的内存布局

考虑以下简单结构: 结构A{浮动数据[16];}; 我的问题是: 假设平台上的 float 是32位IEEE754浮点数(如果很重要),使用C ++标准保证 struct A的预期内存布局 ?如果没有,它能保证什么和/或什么是强制执行保证的方式? 通过期望的内存布局,我的意思是该结构占用内存中的 16 * 4 = 64 个字节,每个连续的 4 个字节均被占用通过 data 数组中 ..
发布时间:2021-04-19 20:54:09 C/C++开发

非连续数组的块状视图连续部分为较大大小的dtype

我试图从超长字符数组生成三元组数组(即连续三个字母的组合): #数据实际上是从源文件加载的a = np.random.randint(0,256,2 ** 28,'B').view('c') 由于复制效率不高(并且会产生诸如高速缓存未命中之类的问题),因此我使用跨步技巧直接生成了Trigram: tri = np.lib.stride_tricks.as_strided(a,(len(a ..
发布时间:2021-04-09 20:25:26 Python

地址的含义0x8048080

为什么当我在gdb中调试asm源时是0x8048080为代码的起始入口点选择的地址?这只是相对偏移量,而不是指令存储器中的实际偏移量,对吗? 解决方案 地址0x8048080没有特殊意义,但地址0x08048000有一个特殊含义. 后一个地址是默认地址,在Linux/x86上,ld在该默认地址上开始第一个PT_LOAD段.在Linux/x86_64上,默认值为0x400000,您可以 ..
发布时间:2020-11-13 01:41:23 服务器开发

提供对AoS的AoS访问

我将数据以数组结构(SoA)或指针结构(SoP)的形式布置在内存中,并且有一种访问该数据的方式,就好像它是以结构数组(AoS)的形式布置一样- -下面给出的代码. 但是,我对使用struct AoS_4_SoP不太满意-尽管此struct似乎使用模板,但它并不是通用的,因为例如foo和bar在内部进行了硬编码它. 两个问题/要求: 1)为了实现读写性能,AoS访问是否与直接SoA ..

是否保证子阵列线性分配?

我知道此答案违反了我相信这并不能保证,但是当我搜索标准时,我发现自己的信心开始动摇.如果我静态分配2D数组,像这样: int foo[][4] = { { 5, 7, 8 }, { 6, 6 }, {}, { 5, 6, 8, 9 } }; 我可以假设所有元素都是线性分配的吗?也就是说, ..
发布时间:2020-06-30 20:25:12 C/C++开发

C ++继承的内存布局

如果我有两个类,一个类继承自另一个类,而子类仅包含函数,那么两个类的内存布局是否相同? 例如 class Base { int a,b,c; }; class Derived: public Base { // only functions. }; 我已阅读到编译器无法对数据成员进行重新排序,并且我不需要对Derived类进行多重继承.有什么情况下内存布局会不同吗? (B ..
发布时间:2020-06-30 20:24:06 C/C++开发

为什么即使不涉及虚拟功能,虚拟继承也需要vtable?

我阅读了以下问题: C ++虚拟类继承对象大小问题,并且想知道为什么虚拟继承会在类中导致附加的vtable指针. 我在这里找到了一篇文章: https://en.wikipedia.org/wiki/Virtual_inheritance 告诉我们: 但是,通常只能在运行时知道此偏移量,... 我在这里不了解与运行时相关的内容.完整的类继承层次结构在编译时就已为人所知.我了 ..
发布时间:2020-06-30 20:22:58 C/C++开发