标签: memset

C++ memset()用于长(64位)类型

可能重复:
是否有memset()接受大于char的整数?

正如在memset的声明中可以看到的那样:

void * memset ( void * ptr, int value, size_t num );
Run Code Online (Sandbox Code Playgroud)

有没有办法使用这个memset函数(或STL库中包含的其他函数),以便您可以将内存设置为long long类型值?

我用它来初始化一个具有较大值的long long数组.

我必须说,我通过简单地迭代数组的每个值并将其设置为所需的值来"解决"这个问题.

c++ memset

2
推荐指数
1
解决办法
8160
查看次数

LPC11xx Cortex-M0 FreeRTOS Hardfault

我一直在使用恩智浦LPC11XX设备和FreeRTOS上的项目.问题是,这个演示项目使用了一些基于Eclipse的IDE,我不会有任何这个.我把它转换为在linux中编译,我可以编程没有任何问题.我看到的问题是当演示项目到达memset()时,CPU中会产生硬故障.这不是我的代码,但我觉得这与我所做的事情有关.我正在使用代码源"gcc版本4.4.1(Sourcery G ++ Lite 2010q1-188)"编译器(我在Cortex-M3设备上使用时没有问题).我看到在一个该死的"lsls"指令上生成的硬错误,它在内存中没有任何内容,看到这个GDB输出的大量粘贴器:http://pastebin.com/3pg0puSe(我不知道这里的大块通用做法是什么这样的文字.)

任何想法,任何人?谢谢您的帮助!

arm memset

2
推荐指数
1
解决办法
943
查看次数

读/写void *变量的单个字节

如果我有

void *temp = malloc(128);
memset(temp, 0 , 128);  
Run Code Online (Sandbox Code Playgroud)

我想单独读取第一个字节,这是我在做什么。

char a[2];
strncpy(a, (char*)temp, 1);
int p = a[0];
//p will be zero in this case
Run Code Online (Sandbox Code Playgroud)

Q1。我敢肯定,有一种更优雅的方法可以达到相同目的。如果是这样,那会是什么?

Q2。有没有办法我可以单独更改单个字节的值?

假设我希望第一个字节的值等于int值48(即00110000),我该怎么做?我写的没有任何进展。

c c++ malloc memset void-pointers

2
推荐指数
1
解决办法
1968
查看次数

如何在 2d 向量上进行 memset

所以我在这里有一个 2D 向量,我想为其分配一个值 num,我想看看作为 C++ 菜鸟的填充与 memset() 哪个更好,我实际上在设置正确的代码语法时遇到了问题,因为我总是在以下情况下遇到分段错误我做。

vector<vector<int>> matrix(10, vector<int>(10000000));
int main()
{
    int num;
    cin >> num;
    int i = 0;
    for (auto &i : matrix)
    {
        fill(i.begin(), i.end(), num); 
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ memset fill 2d-vector

2
推荐指数
1
解决办法
3537
查看次数

memset() 在 C++ 中如何工作

我创建了一个布尔二维数组并memset像这样使用:

bool chk[3][3];

memset(chk, 1, 9*sizeof(chk[0]));
Run Code Online (Sandbox Code Playgroud)

我使用以下代码块得到了预期的输出(每行都有 1 )

for(int i = 0 ; i < 3; i++){
    for(int j = 0; j < 3; j++)
        cout<<chk[i][j] <<" ";
    cout<<endl;
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试操作数组时,我得到了意想不到的结果

然后我尝试了

memset(chk, 1, 9*sizeof(chk[0][0]));
Run Code Online (Sandbox Code Playgroud)

这次一切都很好并得到了我预期的结果(操作后)

您能帮我指出 memset() 中到底发生了什么吗?

c++ memset multidimensional-array

2
推荐指数
1
解决办法
1004
查看次数

是否std :: memset等效于std :: array?

是否有相应的memset std::array?我认为memset在将数组初始化为零而不是循环遍历数组时应该表现得更好.我搜索了一个,std::array但在网上找不到任何东西.

c++ memset c++11 stdarray

2
推荐指数
1
解决办法
1041
查看次数

为什么memset在功能上会有所不同?

我试图弄清楚为什么当我从函数内部调用memset时不起作用。当然,我可以使用for循环来重置所有值,但是我在这里学习,这件事使我没有任何解释。

/* First source code */
#include <stdio.h>
#include <string.h>

int main(void) {
    int i, j, num;

    printf("Digit a number :");
    scanf("%d", &num);

    int magic[num][num];

    printf("First\n");
    for(i = 0; i < num; ++i) {
        for(j = 0; j < num; ++j) {
            printf("%4d", magic[i][j]);
        }
        printf("\n\n");
    }

    memset(magic, 0, sizeof(magic));

    printf("Before\n");
    for(i = 0; i < num; ++i) {
        for(j = 0; j < num; ++j) {
            printf("%4d", magic[i][j]);
        }
        printf("\n\n");
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)
/* Second source code */ …
Run Code Online (Sandbox Code Playgroud)

c arrays function c99 memset

2
推荐指数
1
解决办法
61
查看次数

为什么在使用 memset 用零填充对象后,在 dynamic_cast 时出现异常

我正在用的dynamic_cast这个奇怪的运行时异常,但只有当我填的是我与使用零铸造的对象memset,或者只是一些数据复制到它memcpy。这是生成异常的示例。

class Base
{
public:
    virtual void func() { }
};

class Derived : public Base
{
public: 
    void func() override { }    
};

int main()
{   
    Derived derived;
    Base* base_ptr = &derived;
    memset(base_ptr, 0, sizeof(Derived));

    Derived* derived_ptr = dynamic_cast<Derived*>(base_ptr);    
}
Run Code Online (Sandbox Code Playgroud)

异常消息是:在此处输入图片说明

如果我Derived使用 memcpy将一个对象复制到另一个对象,我会得到相同的异常。任何人都知道发生了什么,是否弄乱了dynamic_cast使用的 RTTI ?

我正在制作一个游戏引擎,它是一个实体组件系统,在程序中的某个时刻,我从一个文件中加载了所有对象及其组件。我实现不同组件的方式是使用继承(每个组件都源自一个基本组件)。当我加载对象及其组件时,我不能只分配组件占用的内存量,我必须使用新的组件名称,因为只有这样 dynamic_cast 才能工作。

我正在使用 Visual Studio 2019。

c++ inheritance dynamic-cast memset memcpy

2
推荐指数
1
解决办法
76
查看次数

punpcklbw(在 MMX/SSE/AVX 中交错)有哪些用例?

  1. 可以使用哪些类别的算法punpcklbw

  2. 特别是,在punpcklbw xmm0, xmm0做什么?

  3. 然而,什么是maskedPow2_Value有用的?

    maskedValue = 0x101010101010101i64 * *(_QWORD *)&Val; // Val 是 int maskedPow2_Value = 0x101010101010101i64 * maskedValue;

(或mov r9, 101010101010101h; imul rdx, r9;两次)

一个完整的例子(该函数名为 CompressPacket 但它可能会产生误导),作为 IDA 反编译的结果:

void *__cdecl CompressPacket(void *Dst, int Val, size_t Size)
{
  __int64 maskedPow2_Value; // rdx
  unsigned int v5; // ecx
  __int64 *bufferOut; // rcx
  size_t size_; // r9
  size_t i; // r9
  size_t size__; // r9
  size_t counter; // r8
  size_t j; // …
Run Code Online (Sandbox Code Playgroud)

compression assembly sse memset disassembly

2
推荐指数
1
解决办法
99
查看次数

使用 C 测量内存写入带宽

我正在尝试测量内存的写入带宽,我创建了一个 8G 字符数组,并使用 128 个线程在其上调用 memset。下面是代码片段。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <pthread.h>
int64_t char_num = 8000000000;
int threads = 128;
int res_num = 62500000;

uint8_t* arr;

static inline double timespec_to_sec(struct timespec t)
{
    return t.tv_sec * 1.0 + t.tv_nsec / 1000000000.0;
}

void* multithread_memset(void* val) {
    int thread_id = *(int*)val;
    memset(arr + (res_num * thread_id), 1, res_num);
    return NULL;
}

void start_parallel()
{
    int* thread_id = malloc(sizeof(int) * threads);
    for (int i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

c memory parallel-processing memset memory-bandwidth

2
推荐指数
1
解决办法
1375
查看次数