这里的“长”指的是超级长的那种,比如超过60个字符的函数名。
这些很长的函数名会不会对Emacs的性能造成影响?以及给函数命名的时候应该长点好还是短点好?
这里的“长”指的是超级长的那种,比如超过60个字符的函数名。
这些很长的函数名会不会对Emacs的性能造成影响?以及给函数命名的时候应该长点好还是短点好?
https://github.com/emacs-mirror/emacs/blob/ab871981125393d89202932284eda6e507bfc6fd/src/lread.c
Lisp_Object
oblookup (Lisp_Object obarray, register const char *ptr, ptrdiff_t size, ptrdiff_t size_byte)
{
size_t hash;
size_t obsize;
register Lisp_Object tail;
Lisp_Object bucket, tem;
obarray = check_obarray (obarray);
/* This is sometimes needed in the middle of GC. */
obsize = gc_asize (obarray);
hash = hash_string (ptr, size_byte) % obsize;
bucket = AREF (obarray, hash);
oblookup_last_bucket_number = hash;
if (EQ (bucket, make_fixnum (0)))
;
else if (!SYMBOLP (bucket))
error ("Bad data in guts of obarray"); /* Like CADR error message. */
else
for (tail = bucket; ; XSETSYMBOL (tail, XSYMBOL (tail)->u.s.next))
{
if (SBYTES (SYMBOL_NAME (tail)) == size_byte
&& SCHARS (SYMBOL_NAME (tail)) == size
&& !memcmp (SDATA (SYMBOL_NAME (tail)), ptr, size_byte))
return tail;
else if (XSYMBOL (tail)->u.s.next == 0)
break;
}
XSETINT (tem, hash);
return tem;
}
bucket hash
你应该知道了吧
感谢…………
没懂,上面代码说明了啥?
obarry lookup 只和加載速度有关,而且对 I/O 操作讲這点性能影响微不足道的。
已经加載好的 symbol 都不过是指針,symbol name 的长度对函数运行性能沒影响,就是会占点內存罢了,而且想省这点內存还不如把 Emacs 所有的 dostring 删了有效。
整天想性能,咋不去造 CPU,对 CPU 管线设计细节不了解的话写的代碼可是会有性能损失的啊。
就是因为没本事造才要想啊……