由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - gurus: How to optimize this c code
相关主题
请问strcpy()和memcpy()的写法问题  (转载)大家看看这个简单的qsort排序的问题
一个java class downcast 的问题pointer to function
[合集] 【求助】如何将c string中的string转换成int?谢谢数组问题
C++ | A memory allocation question大侠们救命, C++ operator new 问题
C++确实不适合做大项目请教如何修正这个C程序的bug。
A C++ private member function problem请教C++里面这个表达
INIT_WORK从Linux kernel 2.6.20后改了?guess what is this code for?
请问以下代码有什么错误?Array in C
相关话题的讨论汇总
话题: char话题: void话题: 256话题: gurus话题: optimize
进入Programming版参与讨论
1 (共1页)
f*********e
发帖数: 10
1
void init_f (void)
{
char c[256] = {0};
int i = 0;
for (i = 0; i < 256; i++)
c[i] = (char) i;
}
D*******a
发帖数: 3688
2
用uint64一次加8个字节

【在 f*********e 的大作中提到】
: void init_f (void)
: {
: char c[256] = {0};
: int i = 0;
: for (i = 0; i < 256; i++)
: c[i] = (char) i;
: }

p***o
发帖数: 1252
3
void init_f (void)
{
/* char c[256] = {0};
int i = 0;
for (i = 0; i < 256; i++)
c[i] = (char) i;*/
}
k**********g
发帖数: 989
4
static const char c[256] =
{
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, tnnd ...
};
n******t
发帖数: 4406
5
你这是什么东东?好像啥也没做。

【在 f*********e 的大作中提到】
: void init_f (void)
: {
: char c[256] = {0};
: int i = 0;
: for (i = 0; i < 256; i++)
: c[i] = (char) i;
: }

f*********e
发帖数: 10
6
It's a piece of code to test if you can optimize it so it runs faster than
the current implementation.

【在 n******t 的大作中提到】
: 你这是什么东东?好像啥也没做。
g*****y
发帖数: 7271
7
纯从code看的话,把这个function直接丢掉运行最快,因为它什么也没做啊。
我估计是这个原因才有前面的问题的吧?

【在 f*********e 的大作中提到】
: It's a piece of code to test if you can optimize it so it runs faster than
: the current implementation.

f*********e
发帖数: 10
8
this is one of the interview questions. I cannot figure it out. So put it
here and see if any gurus have any ideas to optimize it to run faster.

【在 g*****y 的大作中提到】
: 纯从code看的话,把这个function直接丢掉运行最快,因为它什么也没做啊。
: 我估计是这个原因才有前面的问题的吧?

y***d
发帖数: 2330
9
simply
const char s0[256] = {0, 1, 2, 3, ...., 255}
memcpy ...

【在 f*********e 的大作中提到】
: this is one of the interview questions. I cannot figure it out. So put it
: here and see if any gurus have any ideas to optimize it to run faster.

L***n
发帖数: 6727
10
i guess they are testing you some basic optimization techniques like loop
unrolling, etc

【在 f*********e 的大作中提到】
: this is one of the interview questions. I cannot figure it out. So put it
: here and see if any gurus have any ideas to optimize it to run faster.

相关主题
A C++ private member function problem大家看看这个简单的qsort排序的问题
INIT_WORK从Linux kernel 2.6.20后改了?pointer to function
请问以下代码有什么错误?数组问题
进入Programming版参与讨论
p*********t
发帖数: 2690
11
o(n),难道要优化成o(1)?
想不出来。难道是要用List之类的?

【在 f*********e 的大作中提到】
: void init_f (void)
: {
: char c[256] = {0};
: int i = 0;
: for (i = 0; i < 256; i++)
: c[i] = (char) i;
: }

g*****y
发帖数: 7271
12
面试问题的话,很多是等着你去问的,看你提的问题就知道你对问题的理解程度了。
如果一定要运行时初始化内存的话,用memcpy那个帖子应该就可以了。其实就是
先单个拷贝不对齐的字节,对于对齐的部分,一次copy 32bits 或 64bits,
比挨个字节赋值要快得多。

【在 f*********e 的大作中提到】
: this is one of the interview questions. I cannot figure it out. So put it
: here and see if any gurus have any ideas to optimize it to run faster.

S**I
发帖数: 15689
13
void init_f(void)
char c[256];
uint64_t* l = (uint64_t*) c;
int i;
// if big-endian, use
// l[0] = 0x0001020304050607;
l[0] = 0x0706050403020100;
for (i = 1; i < 32; i++)
l[i] = l[i-1] + 0x0808080808080808;
}

【在 f*********e 的大作中提到】
: void init_f (void)
: {
: char c[256] = {0};
: int i = 0;
: for (i = 0; i < 256; i++)
: c[i] = (char) i;
: }

p********s
发帖数: 37
14
几个可能的地方:
1.char c[256] = {0}; 会从头到尾把数组赋值成0,没意义
2.if (a 3.c[i] 相当于 *(c+i),比c++和c--浪费
4.不要强制类型转化i,循环变量直接用char
5.见楼上大牛
o*****n
发帖数: 94
15
都是大牛啊

【在 p********s 的大作中提到】
: 几个可能的地方:
: 1.char c[256] = {0}; 会从头到尾把数组赋值成0,没意义
: 2.if (a: 3.c[i] 相当于 *(c+i),比c++和c--浪费
: 4.不要强制类型转化i,循环变量直接用char
: 5.见楼上大牛

k**********g
发帖数: 989
16

我笑了

【在 p********s 的大作中提到】
: 几个可能的地方:
: 1.char c[256] = {0}; 会从头到尾把数组赋值成0,没意义
: 2.if (a: 3.c[i] 相当于 *(c+i),比c++和c--浪费
: 4.不要强制类型转化i,循环变量直接用char
: 5.见楼上大牛

p********s
发帖数: 37
17
自嘲下,多谢楼上
t****t
发帖数: 6806
18
呃, 你弄明白了他笑的原因吗?

【在 p********s 的大作中提到】
: 自嘲下,多谢楼上
p********s
发帖数: 37
19
大概是因为int转char是直接低位拷贝吧,大牛们指点下

【在 t****t 的大作中提到】
: 呃, 你弄明白了他笑的原因吗?
p***o
发帖数: 1252
20
你写出来跑跑看就知道了。

【在 p********s 的大作中提到】
: 大概是因为int转char是直接低位拷贝吧,大牛们指点下
相关主题
大侠们救命, C++ operator new 问题guess what is this code for?
请教如何修正这个C程序的bug。Array in C
请教C++里面这个表达C ++ 问题
进入Programming版参与讨论
t****t
发帖数: 6806
21
char的范围就是0-255, 现在需要0-255. 那什么时候循环能退出呢?

【在 p********s 的大作中提到】
: 大概是因为int转char是直接低位拷贝吧,大牛们指点下
p********s
发帖数: 37
22
void init_f (void)
{
char c[256];
char *cp = c+255;
char i = -1;
while(i)
*cp-- = i--;
c[0] = 0;
}
还是没明白,跑了结果貌似没啥问题,大牛们直说吧。明天电面了,救人一命胜造七级
浮屠啊
p********s
发帖数: 37
23
啊原来是这个,用了不是很elegant的overflow,见楼上。。
我还以为笑话我那个不要类型转化不是优化呢

【在 t****t 的大作中提到】
: char的范围就是0-255, 现在需要0-255. 那什么时候循环能退出呢?
t****t
发帖数: 6806
24
yeah, so you have to do it in two steps: 1-255 and 0. what's the point?

【在 p********s 的大作中提到】
: 啊原来是这个,用了不是很elegant的overflow,见楼上。。
: 我还以为笑话我那个不要类型转化不是优化呢

p********s
发帖数: 37
25
每次循环省一个i
【在 t****t 的大作中提到】
: yeah, so you have to do it in two steps: 1-255 and 0. what's the point?
p********s
发帖数: 37
26
啊。。明白了,受教受教。一年多没写程序汇编指令忘光了,不好意思
f*********e
发帖数: 10
27
我笨, 明白了啥? 能直说吗? 让咱刚入们的长点见识

【在 p********s 的大作中提到】
: 啊。。明白了,受教受教。一年多没写程序汇编指令忘光了,不好意思
t****t
发帖数: 6806
28
well, for one thing, nowadays it's usually not advised to manually or
mentally do C->assembly mapping.

【在 p********s 的大作中提到】
: 啊。。明白了,受教受教。一年多没写程序汇编指令忘光了,不好意思
p********s
发帖数: 37
29
不好意思光顾向大牛们学习没说清楚,俺之前共犯了俩错误,一个是之前说的,int转
char是没有花费的,所以不需要优化循环变量i;另一个是我以为把for里面的判断句从
i<256改成i能节约一个比较,但是好像汇编里j类跳转指令依赖的signal都是要cmp指令
先赋值的,所以这个优化也没啥意义。。

【在 f*********e 的大作中提到】
: 我笨, 明白了啥? 能直说吗? 让咱刚入们的长点见识
L***n
发帖数: 6727
30
so 8086ish...

【在 p********s 的大作中提到】
: 不好意思光顾向大牛们学习没说清楚,俺之前共犯了俩错误,一个是之前说的,int转
: char是没有花费的,所以不需要优化循环变量i;另一个是我以为把for里面的判断句从
: i<256改成i能节约一个比较,但是好像汇编里j类跳转指令依赖的signal都是要cmp指令
: 先赋值的,所以这个优化也没啥意义。。

相关主题
Do the two statements cost the same amount of time?一个java class downcast 的问题
tail call strange behavior on cl.exe[合集] 【求助】如何将c string中的string转换成int?谢谢
请问strcpy()和memcpy()的写法问题  (转载)C++ | A memory allocation question
进入Programming版参与讨论
H****r
发帖数: 2801
31
这init_f(void)整个来看好像没做啥实际有意义的啊?

【在 f*********e 的大作中提到】
: void init_f (void)
: {
: char c[256] = {0};
: int i = 0;
: for (i = 0; i < 256; i++)
: c[i] = (char) i;
: }

H****r
发帖数: 2801
32
#define SPEC_CHAR_ARRY {0, 1, 2, 3, ...., 255}
void init_f (void)
{
char c[] = SPEC_CHAR_ARRY;
// do sth ...
}

【在 y***d 的大作中提到】
: simply
: const char s0[256] = {0, 1, 2, 3, ...., 255}
: memcpy ...

1 (共1页)
进入Programming版参与讨论
相关主题
Array in CC++确实不适合做大项目
C ++ 问题A C++ private member function problem
Do the two statements cost the same amount of time?INIT_WORK从Linux kernel 2.6.20后改了?
tail call strange behavior on cl.exe请问以下代码有什么错误?
请问strcpy()和memcpy()的写法问题  (转载)大家看看这个简单的qsort排序的问题
一个java class downcast 的问题pointer to function
[合集] 【求助】如何将c string中的string转换成int?谢谢数组问题
C++ | A memory allocation question大侠们救命, C++ operator new 问题
相关话题的讨论汇总
话题: char话题: void话题: 256话题: gurus话题: optimize