programing

Memset 정의 및 사용

prostudy 2022. 5. 18. 21:55
반응형

Memset 정의 및 사용

그 기능의 유용성은 무엇인가?memset()?.

정의:ptr이 가리키는 메모리 블록의 첫 번째 숫자 바이트를 지정된 값(서명이 없는 문자로 해석됨)으로 설정한다.

이것은 메모리 주소에 값을 하드 코딩한다는 것을 의미하는가?

memset(&serv_addr,0,sizeof(serv_addr)내가 이해하려고 노력하는 예야

누군가가 아주 간단하게 설명해 주시겠습니까?

memset()비교적 간단한 작업의 매우 빠른 버전:

void* memset(void* b, int c, size_t len) {
    char* p = (char*)b;
    for (size_t i = 0; i != len; ++i) {
        p[i] = c;
    }
    return b;
}

그것은memset(b, c, l)을 결정하다l주소에서 시작하는 바이트b값어치가 있는c. 위의 구현보다 훨씬 더 빠르게 수행된다.

memset()일반적으로 값을 초기화하는 데 사용된다.예를 들어 다음 구조를 고려하십시오.

struct Size {
    int width;
    int height;
}

스택에 이러한 항목 중 하나를 생성하는 경우:

struct Size someSize;

그러면 그 구조물의 값은 정의되지 않을 것이다.0일 수도 있고, 스택의 해당 부분을 마지막으로 사용했을 때부터 있었던 값일 수도 있다.따라서 보통 다음과 같이 그 선을 따르십시오.

memset(&someSize, 0, sizeof(someSize));

물론 다른 시나리오에도 쓰일 수 있지만, 이것은 단지 그것들 중 하나일 뿐이다.단순히 메모리의 일부를 특정 값으로 설정하는 방법이라고 생각하십시오.

memset데이터 유형에 관계없이 메모리 영역을 0으로 설정하는 일반적인 방법이다.라고 말할 수 있다.memset데이터 형식은 신경 쓰지 않고 모든 바이트를 0으로 설정한다.

C++의 IMHO는 피해야 한다.memsetC++가 제공하는 형식 안전성을 회피하기 때문에 가능하면 초기화의 수단으로 생성자 또는 초기화를 사용해야 한다. 클래스 인스턴스에서 수행된 memset은 의도치 않게 무언가를 파괴할 수 있다.

예)

class A
{
public:
  shared_ptr<char*> _p;
};

a memset위의 경우 기준 카운터가 제대로 감소하지 않을 것이다.

memset-메모리의 바이트 설정

시놉시스-

#include<string.h>

void *memset(message *s,int c,size_t n)

설명- memset() 함수는 c(서명이 없는 문자로 변환됨)s가 가리키는 객체의 번째 n바이트 각각에 복사해야 한다.위의 기능에 대해 memset()는 s 값을 반환해야 한다.

그것은 단지 기억을 특정한 가치로 설정하는 것에 불과하다.

여기 예시 코드가 있다.

Memset (const *p,unit8_t V,unit8_t L) , 여기서 P는 표적 메모리에 대한 포인터, V는 값 V로 설정될 표적 버퍼에 대한 값이고 l는 데이터의 길이입니다.

while(L --> 0)
{
    *p++ = V;
}

그런 것 같다.serv_addr일부의 로컬 또는 전역 변수struct -filency -filencystruct sockaddr 있음)class).

&serv_addr그 변수의 주소를 가져가는 겁니다에 대한 첫 번째 주장으로 주어지는 유효한 주소다.memset 두 . 번 째 거의 두 .memset충전에 사용되는 바이트(0바이트)이다.에 대한 마지막 논쟁.memset채울 메모리 영역의 크기(바이트)이며, 이 크기는 해당 메모리 영역의 크기(바이트)serv_addr당신의 예에 있어서 가변적이다.

그래서 이 전화는memset전역 또는 로컬 변수를 지우다serv_addr 일화 포함 포함struct.

실제로, GCC 컴파일러는 최적화할 때, 대개 그것을 풀거나 그 안에 넣기 위해 영리한 코드를 생성한다(실제로, 그것은 종종 내장되어 있기 때문에, GCC는 그것에 대해 매우 영리한 코드를 생성할 수 있다).

참조URL: https://stackoverflow.com/questions/13327155/memset-definition-and-use

반응형