Optimization

记录一下之前对 fsck_msdosfs(8) 的改进

疫情之前,娃在周末会去某个才艺班,上课的时间我觉得实在是比较无聊, 于是就带上笔记本坐在星巴克做一些较小规模的代码清理工作。 最终,我利用这些碎块化的时间完成了对 FreeBSDfsck_msdosfs(8) 的核心代码的算法进行了改进,使其需要的内存用量变成了原先的 11281 \over 128, 这里稍微记一下当时的一些思路。

阅读全文…( 本文约 3370 字,阅读大致需要 7 分钟 )

clang优化器的一个问题

| Kernel | #clang | #compiler | #optimization | #FreeBSD

📜 历史文件已不具备现实意义

今天的一个偶然的发现。FreeBSD clang version 3.6.1 (tags/RELEASE_361/final 237755) 20150525clang 3.8 2015/07/20 的版本同样有此问题。

之前, FreeBSD 上 strndup(3) 的实现是这样的:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
char *
strndup(const char *str, size_t n)
{
	size_t len;
	char *copy;

	len = strnlen(str, n);
	if ((copy = malloc(len + 1)) == NULL)
		return (NULL);
	memcpy(copy, str, len);
	copy[len] = '\0';
	return (copy);
}

而 OpenBSD 上的实现,则是这样的:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
char *
strndup(const char *str, size_t maxlen)
{
	char *copy;
	size_t len;

	len = strnlen(str, maxlen);
	copy = malloc(len + 1);
	if (copy != NULL) {
		(void)memcpy(copy, str, len);
		copy[len] = '\0';
	}

	return copy;
}
阅读全文…( 本文约 304 字,阅读大致需要 1 分钟 )