在Z80机器代码中,一种将缓冲区初始化为固定值的廉价技术,比如所有空白.所以一大堆代码可能看起来像这样.
LD HL, DESTINATION ; point to the source
LD DE, DESTINATION + 1 ; point to the destination
LD BC, DESTINATION_SIZE - 1 ; copying this many bytes
LD (HL), 0X20 ; put a seed space in the first position
LDIR ; move 1 to 2, 2 to 3...
Run Code Online (Sandbox Code Playgroud)
结果是DESTINATION的内存块完全填满了空白.我已经尝试了memmove和memcpy,并且无法复制这种行为.我希望memmove能够正确地完成它.
memmove和memcpy为什么会这样?
有没有合理的方法来进行这种数组初始化?
我已经知道char array [size] = {0}用于数组初始化
我已经知道memset将为单个字符完成工作.
还有什么其他方法可以解决这个问题?
main.h
extern int array[100];
Run Code Online (Sandbox Code Playgroud)
main.c中
#include "main.h"
int array[100] = {0};
int main(void)
{
/* do_stuff_with_array */
}
Run Code Online (Sandbox Code Playgroud)
在main.c模块中,定义并声明了数组.是否包含在模块中的外部声明的行为是否会导致任何问题?
我总是将extern语句可视化为链接器的命令,以"在其他地方寻找实际的命名实体.它不在这里.
我错过了什么?
谢谢.
邪恶.
我想在Disk Defragmentation Arena中尝试一些想法.我得出的结论是,作为实现的先驱,能够将磁盘置于碎片状态是很有用的.在我看来,这是一个比经过碎片整理更难实现的状态.我认为商业碎片整理公司可能已经解决了这个问题.
所以我的问题.....
如何实施一个分裂者呢?在使用它的上下文中有什么意义来测试碎片整理程序?
这个简单的解决方案迅速涌入我的脑海.
#include <ctype.h>
int digit_exists_in
(
const char *s
)
{
while (*s)
{
if (isdigit(*s))
{
return 1;
}
else
{
s++;
}
}
return 0;
}
int main(void)
{
int foundDigit = digit_exists_in("abcdefg9ijklmn");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
还有什么其他技术可以提高速度?
被搜索的实际字符串是可变长度,字符本身是ASCII,而不是完整的字符集.字符串是NUL终止的.
肯定答案是"你不能"或"使用XP模式",但我想知道它是否可能.
我遇到的问题是每当我调试一些应用程序并遇到断点时,当我停止调试器时,调试对象仍然卡住.它不能被杀死,我不能附加另一个调试器(它说它已经被调试).在关闭Visual C++之前,它不会消失.
这是在Windows 7 64位安装上的开销.VC安装了SP 6.
我有一个适应度函数,它根据位于4D数组上的数据对int数组上的值进行评分.分析器说这个功能占用了80%的CPU时间(需要数百万次).我似乎无法进一步优化它(如果它甚至可能).这是功能:
unsigned int lookup_array[26][26][26][26]; /* lookup_array is a global variable */
unsigned int get_i_score(unsigned int *input) {
register unsigned int i, score = 0;
for(i = len - 3; i--; )
score += lookup_array[input[i]][input[i + 1]][input[i + 2]][input[i + 3]];
return(score)
}
Run Code Online (Sandbox Code Playgroud)
我试图将阵列扁平化为单一维度,但性能没有改善.这是在IA32 CPU上运行的.任何CPU特定的优化也很有帮助.谢谢
是否有任何技术可以让一个向量元素放在监视窗口中,实际上看到它在更改时会更新?
这是背景.
vector<int> x;
x.push_back(3);
Run Code Online (Sandbox Code Playgroud)
然后将x [0]放入监视窗口并实际看到它的值.
如果没有解决这个问题的解决方案,最好的替代方案是什么?
最近,SourceSafe与visual studio的集成开始表现不佳,因为我们已经移动了,而SourceSafe"服务器"位于VPN上,经历了一个缓慢的连接.这使得在visual c ++ 6中加载大型项目需要5分钟以上,因为它必须与每个项目的"服务器"进行通信.此外,有一些错误在集成中是危险的(某些共享项目的自动检出将在分支文件的错误版本上获得最新版本).这导致我想要禁用SourceSafe集成,但是我没有找到任何菜单选项或卸载选项.谷歌已报告了一些注册表调整,但似乎没有一个工作.
有没有人知道从Visual C++ 6中删除SourceSafe集成的简单方法,而不是完全卸载SourceSafe?
我试图创建一个宏,只有当它是一个调试版本时才执行代码块.我设法只在启用调试时才执行一行,但我无法弄清楚如何执行整个代码块.
一行宏如下:
#include <iostream>
//error checking
#if defined(DEBUG) | defined(_DEBUG)
#ifndef DBG_ONLY
#define DBG_ONLY(x) (x)
#endif
#else
#ifndef DBG_ONLY
#define DBG_ONLY(x)
#endif
#endif
int main () {
DBG_ONLY(std::cout << "yar" << std::endl);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何让编译器根据传递给构造函数的参数推断模板参数。这是我尝试过的:
#include <array>
template<size_t N, size_t M>
class A {
public:
A(const std::array<float, N>& n, const std::array<double, M>& m)
: nElements(n), mElements(m) {
}
private:
std::array<float, N> nElements;
std::array<double, M> mElements;
};
int main() {
A<2, 3> a({1.4f, 2.5f}, {3.0, 2.1, 4.8});
// ^
// |
// how can i avoid <2,3> expclicit declaration here?
}
Run Code Online (Sandbox Code Playgroud)
非常感谢您提供任何可能的帮助!