问题标签 [data-segment]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 尺寸效用的奇怪行为
第一种情况:
尺寸输出:
第二种情况:
尺寸输出:
理想情况下应该是:
第三种情况:
尺寸输出:
这是对的
为什么第二种情况下的输出不正确?
assembly - 汇编器中有两个堆栈?
我正在使用 8086 汇编器进行编码,遇到了一个有趣的问题。主题是评估括号。如果这是Java
or中的一个问题C
,我将简单地定义两个堆栈 - 一个用于数字,另一个用于操作数。我可以做类似的事情Assembly
吗?据我所知,堆栈是在数据段的最后一个内存单元中定义的。如果我定义另一个数据段,我会有另一个可用的堆栈吗?
另一个信息:我不知道一开始的输入大小,我应该使程序尽可能高效。
谢谢!
c - 数据段与堆栈
全局变量分配在数据段中,而局部变量则留在堆栈中。我知道访问存储在堆中的变量比访问局部变量要慢,但我不知道访问局部变量是否比访问全局变量快。它取决于编译器吗?差异是否显着?
c - 如果需要,分配器可以使用未初始化的数据段来满足堆请求吗?
我是 C 的新手,我对分配器在 C 中可以做什么感到困惑。
正如标题所问,如果需要,分配器可以使用未初始化的数据段来满足堆请求吗?
c - 目标文件的未初始化变量未显示在 linux size 命令中
使用以下代码创建了一个源文件 test1.c:
使用命令编译以下代码:
使用 size 命令检查各个内存段的大小:
我获得的输出:
而且我发现,每当我在 bss 段上方添加一个全局未初始化变量(如int l )时,它都保持不变。bss 段仅显示那些初始化为 0 的变量。但根据定义,bss 段应包含未初始化的变量。
每当我添加一个初始化的全局指针时,比如:
它将数据段的大小增加了 12 而不是 8(这是我机器上整数指针的大小)。
我的解释有什么问题?
c++ - 使用 MapViewOfFile 分配静态共享内存
如何将共享内存分配给如下所示的静态缓冲区,但使用 CreateFileMapping 和 MapViewOfFile。
目标是创建一个在 C++ 和 FORTRAN 应用程序之间共享的静态共享缓冲区,就像使用data_seg
. 创建动态分配的缓冲区时,FORTRAN 变得很棘手,因为您需要取消引用指针,这也是可行的,但这不是我想要的。
c++ - 识别 Win32/Win64 中的数据段
我是某个进程的内存空间中加载的DLL。我是此过程中存在的许多 DLL 的一部分,有些是动态加载的,有些是静态加载的。
有一个“数据宝石”让我在这个进程空间的某个地方发现,我们假设它在一个“数据”段中(即不是在一些奇怪的自我修改代码中)。
我需要找到它。我需要搜索内存,例如做一个 memcmp() 但我不知道从哪里开始寻找。也许我可以从 0 到 many-gigs 进行暴力搜索,但这会引发读取访问或仅执行异常,也许我将能够处理这些异常,这样我就不会降低整个过程。但这听起来很狡猾。
有没有更智能的搜索方式?在我的脑海中,我可以查看主进程的数据段,因为有一种方法可以从 NT 标头中获取地址范围,而且我确实知道我已经加载的进程。然后我可以枚举所有加载的 DLL 并查看它们的空间。
谁能建议一种方法,甚至告诉我我是否走在正确的轨道上?
linux - 在 Linux 中的汇编 x86_64 中的声明处获取字符串长度
参见 and 的语句string1
以及string2
它们的len1
and len2
。代码是使用GNU 汇编器的 x86_64汇编,传递参数以调用Linux x86_64 系统调用。当我奇怪地在执行中生成一个无意义的值()。但是,当我工作正常时。前者作为参数,后者作为参数。mov len1, %rdx
8390045993705406470
mov len1, %rdi
mov
sys_write
sys_exit
代码:( foo.s
)
编译:
执行:
如果我删除string2
并且len2
它有效。
实际上,完整的代码是要创建文件/tmp/foo.txt
并在其中写入一些文本。总之:在标准输出中写一条消息;打开文件; 在里面写点东西;关闭它;退出进程。
内核版本:
对象转储输出:
关于如何克服这个问题的任何想法?
c - 每个静态和全局(未初始化/初始化变量)的数据段内存分配不正确
我试图了解内存分配如何适用于任何执行或编译的 C 代码。
我编写了以下 5 个单独的小代码,它们将帮助我理解内存分配过程。
段大小1.c
/li>段大小2.c
/li>段大小3.c
/li>段大小4.c
/li>段大小5.c
/li>
根据我的理解,如果我们编译上面的文件,那么在编译segment_size2.c后BSS大小应该增加4个字节,编译segment_size3.c后数据大小应该增加4个字节。但是当我点击 size 命令时,我得到了以下结果,
在这里我们可以清楚地看到编译segment_size3后bss和data段同时更新。这怎么可能?
c - C(64 位)中的内存分配布局问题
我想了解“C”程序如何运行并将数据存储在机器中。所以我从这里查看了 C 的内存布局,并在我的 64 位机器上遵循了相同的指令。
首先,当我编写程序(main
只有return 0;
)并使用size
可执行文件的命令时:它在文本和数据段中显示出很多差异。
但在上面提到的网站上显示:
第一个问题:
负责内存分配的因素(硬件/软件)是什么?dec
布局中指的是什么?/问题到此结束
但首先我忽略了这一点并开始声明变量(全局和静态)以查看它们的存储位置。我在这个阶段面临一个问题。
对于此代码:
我得到的输出为:
那是因为我声明(未初始化)一个全局变量,这就是为什么将 16 个字节(int-64bit)的内存块添加到它bss
所以它从 2640 变成 2656(第一个示例)我理解这一点。
Q2:但是当我添加static int x
它时,它不再添加内存块bss
。这是预期的吗?
Q3:最后当我用 初始化全局变量时20
,data
增加(预期)并且dec
也增加了为什么?
我知道我在这里问了很多问题,但我想知道这种内存管理在 C 中是如何工作的。
阿里加托:)