avatar
问个超简单的C问题# Programming - 葵花宝典
d*u
1
onsite的时候说尽量一周内告诉我决定的,但是现在一周过去了,还没有消息。好担心
会有什么变化,或是有onsite的时候犯了什么错误自己还不知道。当时感觉都是谈定了
的样子,说去问问h1b的事情如何办,然后就差不多了。等得好难受,发信过去骚扰了
,但是没有回应。
avatar
h*e
2
avatar
h*i
3
你们相信精子,卵子的存在吗?
精子有灵魂吗?
卵子有灵魂吗?
受精卵有灵魂吗?
avatar
n*r
4
其实叶子繁密就好
可她们自做主张开了花儿
花瓣里长出舌头,花托儿上长出耳朵;
是一朵浅紫的酢浆草
第一个长出牙齿
这些勇敢得令人惊叹、本领好大的仿生族!
尚未有漂亮的眼睛,就已经目光犀利
我要对她们微笑
好让她们长出一张没有被欺负到的脸
=========
陈丹青的说法,“一张没有被欺负过的脸。”
有意思~
avatar
r*o
5
void foo()
{
int a=3;
}
int main()
{
foo();
return 0;
}
上面的常数3是不是先放在RODATA 数据段,在main()函数执行foo()的时候再从RODATA读
出来赋给stack上面的a变量。
这样,RODATA和stack都有一个地方存了这个3。
对吗?
avatar
a*n
6
别想着这个了,继续申请别的。当然不代表这个就没戏了,有可能教授还没有打听
好h1b的事

【在 d******u 的大作中提到】
: onsite的时候说尽量一周内告诉我决定的,但是现在一周过去了,还没有消息。好担心
: 会有什么变化,或是有onsite的时候犯了什么错误自己还不知道。当时感觉都是谈定了
: 的样子,说去问问h1b的事情如何办,然后就差不多了。等得好难受,发信过去骚扰了
: ,但是没有回应。

avatar
a*u
7
不漲就怪了。
這是紙幣橫飛的歲月。

【在 h***e 的大作中提到】
: 恩
avatar
s*n
8
精子有灵魂的话, 男人就太难做了。

【在 h****i 的大作中提到】
: 你们相信精子,卵子的存在吗?
: 精子有灵魂吗?
: 卵子有灵魂吗?
: 受精卵有灵魂吗?

avatar
s*t
9
太生动了

【在 n*****r 的大作中提到】
: 其实叶子繁密就好
: 可她们自做主张开了花儿
: 花瓣里长出舌头,花托儿上长出耳朵;
: 是一朵浅紫的酢浆草
: 第一个长出牙齿
: 这些勇敢得令人惊叹、本领好大的仿生族!
: 尚未有漂亮的眼睛,就已经目光犀利
: 我要对她们微笑
: 好让她们长出一张没有被欺负到的脸
: =========

avatar
b*i
10
不一定啊。我要写编译器,就作为立即数放了。或者优化了。

【在 r****o 的大作中提到】
: void foo()
: {
: int a=3;
: }
: int main()
: {
: foo();
: return 0;
: }
: 上面的常数3是不是先放在RODATA 数据段,在main()函数执行foo()的时候再从RODATA读

avatar
s*a
11
不用等了,move on 吧, 有的老板就是拖拉的不得了。
去年十二月初面试的,到一月底才打电话说给发offer,可等到二月底也没见到offer,
催了一下,还是说给,但还是没动静。幸好还有别的offer, 写了封据信了事。

【在 d******u 的大作中提到】
: onsite的时候说尽量一周内告诉我决定的,但是现在一周过去了,还没有消息。好担心
: 会有什么变化,或是有onsite的时候犯了什么错误自己还不知道。当时感觉都是谈定了
: 的样子,说去问问h1b的事情如何办,然后就差不多了。等得好难受,发信过去骚扰了
: ,但是没有回应。

avatar
x*e
12
what items? I have not yet bought anything yet. Which one is worth buying?
gold or silver (not many silver pandas anyway)

【在 h***e 的大作中提到】
: 恩
avatar
S*t
13
奇思妙想
avatar
j*a
14
gcc编译一下, objdump反编译一下,看看汇编代码

【在 r****o 的大作中提到】
: void foo()
: {
: int a=3;
: }
: int main()
: {
: foo();
: return 0;
: }
: 上面的常数3是不是先放在RODATA 数据段,在main()函数执行foo()的时候再从RODATA读

avatar
d*u
15
老板昨晚回信了,说他是决定给我offer的,说今天会跟学校admin people谈我的offer
细节,但是最后关照我在没有收到正式offer之前不要告诉现在的雇主。这样的情况下
还会有什么变卦吗?
avatar
h*e
16
ebay上的东西值不值得买完全看最后成交价格啊,我也不好告诉你哪个值得买
简言之,价格不离谱的老精稀可以购入

【在 x*******e 的大作中提到】
: what items? I have not yet bought anything yet. Which one is worth buying?
: gold or silver (not many silver pandas anyway)

avatar
i*a
17
好喜欢这句~

【在 n*****r 的大作中提到】
: 其实叶子繁密就好
: 可她们自做主张开了花儿
: 花瓣里长出舌头,花托儿上长出耳朵;
: 是一朵浅紫的酢浆草
: 第一个长出牙齿
: 这些勇敢得令人惊叹、本领好大的仿生族!
: 尚未有漂亮的眼睛,就已经目光犀利
: 我要对她们微笑
: 好让她们长出一张没有被欺负到的脸
: =========

avatar
r*o
18
Thanks,
那要是
void foo
{
int a[100]={1,2,3};
...
}
呢?

【在 b***i 的大作中提到】
: 不一定啊。我要写编译器,就作为立即数放了。或者优化了。
avatar
a*n
19
一般不会,要是变卦的话,这样老板最好别跟。

offer

【在 d******u 的大作中提到】
: 老板昨晚回信了,说他是决定给我offer的,说今天会跟学校admin people谈我的offer
: 细节,但是最后关照我在没有收到正式offer之前不要告诉现在的雇主。这样的情况下
: 还会有什么变卦吗?

avatar
x*e
20
oh, I thought you were talking about pandaamerica.com ...

【在 h***e 的大作中提到】
: ebay上的东西值不值得买完全看最后成交价格啊,我也不好告诉你哪个值得买
: 简言之,价格不离谱的老精稀可以购入

avatar
n*r
21
谢谢读贴,周末开心!
avatar
S*I
22
gcc直接能生成汇编,不需要objdump。

【在 j*a 的大作中提到】
: gcc编译一下, objdump反编译一下,看看汇编代码
avatar
h*e
23
他们在EBAY上也卖的

【在 x*******e 的大作中提到】
: oh, I thought you were talking about pandaamerica.com ...
avatar
L*o
24
奇妙,喜欢

【在 n*****r 的大作中提到】
: 其实叶子繁密就好
: 可她们自做主张开了花儿
: 花瓣里长出舌头,花托儿上长出耳朵;
: 是一朵浅紫的酢浆草
: 第一个长出牙齿
: 这些勇敢得令人惊叹、本领好大的仿生族!
: 尚未有漂亮的眼睛,就已经目光犀利
: 我要对她们微笑
: 好让她们长出一张没有被欺负到的脸
: =========

avatar
S*I
25
这得看编译器优化到什么程度。开优化的情况下,foo可能就是一个ret:常量也好,数
组也好,都是对外部毫无影响的局部变量,直接就优化没了。main不调用foo都是有可
能的。

【在 r****o 的大作中提到】
: Thanks,
: 那要是
: void foo
: {
: int a[100]={1,2,3};
: ...
: }
: 呢?

avatar
x*e
26
请问EBAY ID是啥?是可靠商家吗?
谢谢

【在 h***e 的大作中提到】
: 恩
avatar
m*2
27
It depends on the compiler and architech.
I think, for example, arm-gcc will, in general, try to embed numbers into
instructions as immediate numbers before try the .rodata section and the
numbers you give can be used as immediate numbers.

【在 r****o 的大作中提到】
: Thanks,
: 那要是
: void foo
: {
: int a[100]={1,2,3};
: ...
: }
: 呢?

avatar
h*e
28
是可靠,不过EBAY他们是BID卖,最后价格经常很容易偏高(可能有托),你新手还是
少碰

【在 x*******e 的大作中提到】
: 请问EBAY ID是啥?是可靠商家吗?
: 谢谢

avatar
r*o
29
多谢,
咱先假设这个foo()里面还有很多其他操作用到了这个a[]数组吧,所以不能直接把这个
foo()优化没了。
然后呢?
avatar
a*4
30
有些时候,高的吓人。
护士同学,开始的时候多看少买。你现在处于完全新手状态,捡漏是很爽,但是药可不
好吃。现在假的做的很不错,要小心。

【在 h***e 的大作中提到】
: 是可靠,不过EBAY他们是BID卖,最后价格经常很容易偏高(可能有托),你新手还是
: 少碰

avatar
r*o
31
Thanks.
So in ARM, if the array initiazation is a little large, for example,
void foo()
{
int a[5][100] = {{1,2,...,100},{2,3,...,101},{3,4,...,102},{4,5,...,103},{
5,6,...,104}};
//some operation that will use a[][];
}
Then the initialization
{{1,2,...,100},{2,3,...,101},{3,4,...,102},{4,5,...,103},{5,6,...,104}}
will always be in RODATA. Correct?
And when foo() is executed, the CPU will copy the initialized data above
from RODATA to the stack for a[][] array. Correct?

【在 m********2 的大作中提到】
: It depends on the compiler and architech.
: I think, for example, arm-gcc will, in general, try to embed numbers into
: instructions as immediate numbers before try the .rodata section and the
: numbers you give can be used as immediate numbers.

avatar
r*o
32
有人能回答一下吗?
10个包子求准确答案。呵呵。
avatar
S*I
33
还是很难说,要看编译器怎么干。你可以自己编译一下看看汇编。

,{

【在 r****o 的大作中提到】
: Thanks.
: So in ARM, if the array initiazation is a little large, for example,
: void foo()
: {
: int a[5][100] = {{1,2,...,100},{2,3,...,101},{3,4,...,102},{4,5,...,103},{
: 5,6,...,104}};
: //some operation that will use a[][];
: }
: Then the initialization
: {{1,2,...,100},{2,3,...,101},{3,4,...,102},{4,5,...,103},{5,6,...,104}}

avatar
d*n
34
这也可能优化没了。循环都可以直接变成不循环呢。

【在 r****o 的大作中提到】
: 多谢,
: 咱先假设这个foo()里面还有很多其他操作用到了这个a[]数组吧,所以不能直接把这个
: foo()优化没了。
: 然后呢?

avatar
k*e
35
If a[][] is declared as static storage duration then it will certainly go to
.data segment. If not, the compiler will probably use immediate value
instead.
If you compare the following, (gcc version 4.5.3 -O0)
(1) array a[] has "auto" storage duration.
#include
#include
int foo()
{
int a[] = {3, 4, 5};
return a[2];
}
int main(void)
{
int temp;
temp = foo();
printf("%d", temp);
return 0;
}
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000054 00000000 00000000 0000021c 2**2
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 00000000 00000000 00000000 00000000 2**2
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ALLOC, LOAD, DATA
2 .bss 00000000 00000000 00000000 00000000 2**2
ALLOC
3 .debug_abbrev 00000070 00000000 00000000 00000270 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_info 00000192 00000000 00000000 000002e0 2**0
CONTENTS, RELOC, READONLY, DEBUGGING
5 .debug_line 00000246 00000000 00000000 00000472 2**0
CONTENTS, RELOC, READONLY, DEBUGGING
6 .debug_macinfo 00006233 00000000 00000000 000006b8 2**0
CONTENTS, READONLY, DEBUGGING
7 .rdata 00000004 00000000 00000000 000068eb 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .debug_frame 00000054 00000000 00000000 000068ef 2**2
CONTENTS, RELOC, READONLY, DEBUGGING
9 .debug_loc 00000070 00000000 00000000 00006943 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_pubnames 00000023 00000000 00000000 000069b3 2**0
CONTENTS, RELOC, READONLY, DEBUGGING
11 .debug_pubtypes 00000012 00000000 00000000 000069d6 2**0
CONTENTS, RELOC, READONLY, DEBUGGING
12 .debug_aranges 00000020 00000000 00000000 000069e8 2**0
CONTENTS, RELOC, READONLY, DEBUGGING
Disassembly of section .text:
00000000 :
#include
#include
int foo()
{
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 83 ec 10 sub $0x10,%esp
int a[] = {3, 4, 5};
6: c7 45 f4 03 00 00 00 movl $0x3,-0xc(%ebp)
d: c7 45 f8 04 00 00 00 movl $0x4,-0x8(%ebp)
14: c7 45 fc 05 00 00 00 movl $0x5,-0x4(%ebp)
return a[2];
1b: 8b 45 fc mov -0x4(%ebp),%eax
}
1e: c9 leave
1f: c3 ret
00000020
:
int main(void)
{
20: 55 push %ebp
21: 89 e5 mov %esp,%ebp
23: 83 e4 f0 and $0xfffffff0,%esp
26: 83 ec 20 sub $0x20,%esp
29: e8 00 00 00 00 call 2e

2a: DISP32 __main
int temp;
temp = foo();
2e: e8 cd ff ff ff call 0
33: 89 44 24 1c mov %eax,0x1c(%esp)
printf("%d", temp);
37: 8b 44 24 1c mov 0x1c(%esp),%eax
3b: 89 44 24 04 mov %eax,0x4(%esp)
3f: c7 04 24 00 00 00 00 movl $0x0,(%esp)
42: dir32 .rdata
46: e8 00 00 00 00 call 4b

47: DISP32 printf
return 0;
4b: b8 00 00 00 00 mov $0x0,%eax
}
50: c9 leave
51: c3 ret
52: 90 nop
53: 90 nop
(2) array a[] has "static" storage duration.
#include
#include
int foo()
{
static int a[] = {3, 4, 5};
return a[2];
}
int main(void)
{
int temp;
temp = foo();
printf("%d", temp);
return 0;
}
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000003c 00000000 00000000 0000021c 2**2
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 0000000c 00000000 00000000 00000258 2**2
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00000000 00000000 00000000 2**2
ALLOC
3 .debug_abbrev 00000070 00000000 00000000 00000264 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_info 00000195 00000000 00000000 000002d4 2**0
CONTENTS, RELOC, READONLY, DEBUGGING
5 .debug_line 00000244 00000000 00000000 00000469 2**0
CONTENTS, RELOC, READONLY, DEBUGGING
6 .debug_macinfo 00006233 00000000 00000000 000006ad 2**0
CONTENTS, READONLY, DEBUGGING
7 .rdata 00000004 00000000 00000000 000068e0 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .debug_frame 00000054 00000000 00000000 000068e4 2**2
CONTENTS, RELOC, READONLY, DEBUGGING
9 .debug_loc 00000070 00000000 00000000 00006938 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_pubnames 00000023 00000000 00000000 000069a8 2**0
CONTENTS, RELOC, READONLY, DEBUGGING
11 .debug_pubtypes 00000012 00000000 00000000 000069cb 2**0
CONTENTS, RELOC, READONLY, DEBUGGING
12 .debug_aranges 00000020 00000000 00000000 000069dd 2**0
CONTENTS, RELOC, READONLY, DEBUGGING
isassembly of section .text:
00000000 :
#include
#include
int foo()
{
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
static int a[] = {3, 4, 5};
return a[2];
3: a1 08 00 00 00 mov 0x8,%eax
4: dir32 .data
}
8: 5d pop %ebp
9: c3 ret
0000000a
:
int main(void)
{
a: 55 push %ebp
b: 89 e5 mov %esp,%ebp
d: 83 e4 f0 and $0xfffffff0,%esp
10: 83 ec 20 sub $0x20,%esp
13: e8 00 00 00 00 call 18

14: DISP32 __main
int temp;
temp = foo();
18: e8 e3 ff ff ff call 0
1d: 89 44 24 1c mov %eax,0x1c(%esp)
printf("%d", temp);
21: 8b 44 24 1c mov 0x1c(%esp),%eax
25: 89 44 24 04 mov %eax,0x4(%esp)
29: c7 04 24 00 00 00 00 movl $0x0,(%esp)
2c: dir32 .rdata
30: e8 00 00 00 00 call 35

31: DISP32 printf
return 0;
35: b8 00 00 00 00 mov $0x0,%eax
}
3a: c9 leave
3b: c3 ret

,{

【在 r****o 的大作中提到】
: Thanks.
: So in ARM, if the array initiazation is a little large, for example,
: void foo()
: {
: int a[5][100] = {{1,2,...,100},{2,3,...,101},{3,4,...,102},{4,5,...,103},{
: 5,6,...,104}};
: //some operation that will use a[][];
: }
: Then the initialization
: {{1,2,...,100},{2,3,...,101},{3,4,...,102},{4,5,...,103},{5,6,...,104}}

avatar
u*h
36
Only initialized global data will be stored
in data section;
const and string literals are normally in
RO data section;
uninitialized global data are in bss section;
The data variables in your examples are dynamically
allocated and initialized on stack.

【在 r****o 的大作中提到】
: 有人能回答一下吗?
: 10个包子求准确答案。呵呵。

avatar
m*2
37
It make sense for a large array of initialization data to be stored in .
rodata section to be read later with ldm instructions. But I am not sure. I
need to try some cases and get back to you.

,{

【在 r****o 的大作中提到】
: Thanks.
: So in ARM, if the array initiazation is a little large, for example,
: void foo()
: {
: int a[5][100] = {{1,2,...,100},{2,3,...,101},{3,4,...,102},{4,5,...,103},{
: 5,6,...,104}};
: //some operation that will use a[][];
: }
: Then the initialization
: {{1,2,...,100},{2,3,...,101},{3,4,...,102},{4,5,...,103},{5,6,...,104}}

avatar
r*o
38
谢谢,
我比较了一下当initilization data是large array和short array的两种情况下的ARM
assembly code,发现确实前者会被stored 到RODATA,并且function执行的时候RODATA的
数据会被copy到stack。而short array就是直接在stack上用数值初始化了。

I

【在 m********2 的大作中提到】
: It make sense for a large array of initialization data to be stored in .
: rodata section to be read later with ldm instructions. But I am not sure. I
: need to try some cases and get back to you.
:
: ,{

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。