【发布时间】:2012-03-29 21:41:50
【问题描述】:
我有一个非常基本的问题。 让我们来看看这个sn-p:
#include <stdio.h>
void foo(void) {
char *s = "StackOverflow";
printf("%s\n", s);
}
int main(void) {
foo();
}
在进程执行堆栈中,main 被加载到堆栈中,然后 foo() 被调用。 现在,“StackOverflow”的内存分配在哪里? 同样,调用 printf 时,“%s\n”的内存分配在哪里?
考虑以下代码:
现在我的另一个问题是,考虑以下代码:
#include <stdio.h>
int x;
int abc = 100;
void foo(void) {
char *s = "stackoverflow";
printf("%s\n", s);
}
int main(void) {
foo();
}
所以,如果我执行 objdump -s -j .bss a.out ,我应该看到未初始化的段,如果我执行 objdump -s -j .data a.out ,我应该看到初始化段 (abc=100) rt ?这个假设有什么问题吗?
我得到以下输出:
测试> objdump -s -j .bss a.out a.out:文件格式elf32-i386
测试> objdump -s -j .data a.out
a.out:文件格式elf32-i386
.data 部分的内容: 804954c 00000000 3c960408 00000000 64000000 ....<.......d...>
我在这里错过了什么?
再次感谢大家
【问题讨论】:
标签: c