搜索我的问题只得到了不相关的结果。这是最接近的,但它没有回答我的问题堆栈上的变量是否“静态分配”? 所以我知道,如果一个过程没有调用,那么它的堆栈框架就会分配在存储全局和静态变量的静态内存部分中。我的问题是:为什么这会产生优势?因为在运行时,如果堆栈框架在堆栈上分配,它们也会像静态内存一样被写入,对吗?谢谢!
主页
/
user-28496108
Max Sedlusch's questions
Max Sedlusch
Asked:
2025-02-10 22:28:01 +0800 CST
我已经寻找可以回答我的问题的建议问题,但没有找到任何相关问题。
我正在研究编译器设计,并遇到了一种语言支持嵌套词法作用域的特性。这意味着外部变量对于在其他函数中定义的内部函数是可见的。但是,要做到这一点,需要知道在哪个堆栈框架和在哪个偏移量找到相关变量。如果我们的递归深度取决于用户输入,编译器如何在符号表中发出此信息?
谢谢!
Max Sedlusch
Asked:
2025-02-07 22:58:47 +0800 CST
在谷歌上,我得到了 2 个与我的问题相关的结果,但在 SO 上,我没有找到可以回答我的问题。我在谷歌上搜索了“gdb cast struct to unsigned int c”,结果并没有提到 gdb,而是关于结构之间的转换。我正在调试一段具有如下结构的代码:
typedef struct L1_valid_entry{
uint32_t PXN:1;
uint32_t index_1:1;
uint32_t C_B:2;
uint32_t XN:1;
uint32_t DOMAIN:4;
uint32_t IMPL:1;
uint32_t AP_11_10:2;
uint32_t TEX_14_12:3;
uint32_t AP_15:1;
uint32_t nG_S:2;
uint32_t zero:1;
uint32_t NS_19:1;
uint32_t base_address:12;
}L1_valid_entry;
现在我在 GDB 中检查了这样一个结构实例并想将其打印出来,但我想将其打印为无符号整数,而不是将其位字段作为值。我尝试了 p/x 和 p/t,但没有任何变化。
编辑:p/x(无符号整数)有效!!
Max Sedlusch
Asked:
2024-12-25 00:47:02 +0800 CST
没有关于 ARM V7 内联汇编的问题可以回答我的问题,所以我发了一篇帖子。我想将 C 变量的值移动到 r0-r2 中,反之亦然 - 从寄存器移动到 C 变量中。但是,我的代码总是将相同的值 - 12 - 加载到寄存器中。有人能告诉我如何实现我的目标吗?
// syscalls.h
#ifndef SYSCALL_H
#define SYSCALL_H
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define SYSCALL_ID_EXIT 1
#define SYSCALL_ID_CREATE_THREAD 2
#define SYSCALL_ID_GETC 3
#define SYSCALL_ID_PUTC 4
#define SYSCALL_ID_SLEEP 5
#define SYSCALL_ID_UNDEFINED 6
#ifndef __ASSEMBLER__
//...
// syscalls.c
// ...
void syscall_create_thread(void (*f) (void *), void * args, unsigned int arg_size){
unsigned int func = (unsigned int) f;
unsigned int arguments = (unsigned int) args;
unsigned int argument_size = (unsigned int) arg_size;
asm("mov r0, %0" : "=r"(func)::"r0");
asm("mov r1, %0" : "=r"(arguments)::"r1");
asm("mov r2, %0" : "=r"(argument_size)::"r2");
asm("mov r7, #" TOSTRING(SYSCALL_ID_CREATE_THREAD));
asm("SVC #0");
}