C++,用运算符的指针和地址重新创建内存集
C++, recreate memset with pointers and address of operators
tl;dr; 如何使用基本 c++?
重现 memset
我想弄清楚 memset
是如何工作的,看看我是否可以使用指针和地址在正常的 c++
中重现它。
这就是我目前所知道的。
void test_memset( void * origin, uint8_t val, size_t size ){
if( size != 1 ){
uint8_t* new_or = (uint8_t*) origin; // casting to uint8_t*
*new_or ^= (*new_or & 0xff); // clearing any remaining data
*new_or ^= val; // assigning the val
new_or++; // incrementing pointer
test_memset_alloc( new_or, val, size-1 ); // recursion
}
}
所以问题是:基本 C++ 中的 memset 是什么样的?
编辑 1:
回答here in similar manner, and here有点冗长。这两个答案都比我的提议更合适。
但我希望看到一些详细的解决方案,这将能够解释 Mort(业务线开发人员)或知识分散的人,比 :"This is frowned upon" 或 "not a c++ way"。
memset
类似于基本 C++ 中的以下内容:memset
。
不是开玩笑。这是一个非常基本的功能,对于编译器来说,下一步可能是目标特定的汇编代码。
C 或 C++ 中的基本、低效但正确的 memset
实现如下所示:
typedef unsigned char byte;
void* memset(void* s, int c, size_t sz) {
byte* p = (byte*)s;
while (sz--)
*p++ = (byte)c;
return s;
}
这使用循环,因为循环是完成这项工作的正确工具。你坚持避免循环是没有意义的。 "they don't exist from processors point of view" 不是避免使用它们的正当理由。这不是一个真正的声明,甚至不是一个有意义的声明。您的进一步解释表明严重缺乏对 How Things Work™ 的理解。如果一个循环是一个黑盒子,那么一切都是一个黑盒子。函数调用是一个黑盒子。演员是一个黑盒子。 if
语句是一个黑框。像 (x+y)*z
这样的算术表达式是一个黑框。 None 其中或多或少比循环透明。
tl;dr; 如何使用基本 c++?
重现memset
我想弄清楚 memset
是如何工作的,看看我是否可以使用指针和地址在正常的 c++
中重现它。
这就是我目前所知道的。
void test_memset( void * origin, uint8_t val, size_t size ){
if( size != 1 ){
uint8_t* new_or = (uint8_t*) origin; // casting to uint8_t*
*new_or ^= (*new_or & 0xff); // clearing any remaining data
*new_or ^= val; // assigning the val
new_or++; // incrementing pointer
test_memset_alloc( new_or, val, size-1 ); // recursion
}
}
所以问题是:基本 C++ 中的 memset 是什么样的?
编辑 1:
回答here in similar manner, and here有点冗长。这两个答案都比我的提议更合适。
但我希望看到一些详细的解决方案,这将能够解释 Mort(业务线开发人员)或知识分散的人,比 :"This is frowned upon" 或 "not a c++ way"。
memset
类似于基本 C++ 中的以下内容:memset
。
不是开玩笑。这是一个非常基本的功能,对于编译器来说,下一步可能是目标特定的汇编代码。
C 或 C++ 中的基本、低效但正确的 memset
实现如下所示:
typedef unsigned char byte;
void* memset(void* s, int c, size_t sz) {
byte* p = (byte*)s;
while (sz--)
*p++ = (byte)c;
return s;
}
这使用循环,因为循环是完成这项工作的正确工具。你坚持避免循环是没有意义的。 "they don't exist from processors point of view" 不是避免使用它们的正当理由。这不是一个真正的声明,甚至不是一个有意义的声明。您的进一步解释表明严重缺乏对 How Things Work™ 的理解。如果一个循环是一个黑盒子,那么一切都是一个黑盒子。函数调用是一个黑盒子。演员是一个黑盒子。 if
语句是一个黑框。像 (x+y)*z
这样的算术表达式是一个黑框。 None 其中或多或少比循环透明。