포인터 지랄짓하는거라던가 size_t 같은거에 의존하는 코드 있으면 그것들은 대응 다 해줘야하지
노이ㄴ(liliilli)2020-04-15 09:59
케바케지
익명(175.223)2020-04-15 13:23
64비트 컴퓨터에서 64비트 컴파일러로 컴파일하면 됨. 전혀 수정하지 않고 컴파일, 실행까지 아무 문제없는 경우가 많음. 예로 대부분의 오픈소스 소프트웨어들을 보면 32비트용 코드, 64비트용 코드가 따로 존재하지 않음. 그러나 32비트 변수, 64비트 변수 크기에 따라서 문제가 발생하는 경우 있음. 포인터 연산이라던가. 그런 부분에서. 그래서 애초 소스코드를 작성할 때, sizeof (int), sizeof (int *) 이런 코드를 써야 호환성이 높지. 애초 코드를 작성할 때 uint32_t, uint64_t 이런 식으로 변수를 지정했다면 문제 발생 소지가 더더욱 없음.
익명(218.147)2020-04-15 16:22
그리고 통신 프로그램이라면 패킷(전송/수신할 데이터)을 만들 때 32비트/64비트에 따른 변수 크기를 고려하여 uint16_t, uint32_t, uint64_t 이런 식으로 변수를 선언하지 않았다면, 비트 연산이라던가, 패킷 크기가 시스템에 따라 변동될 수 있음. 그렇게 되면 에러 떨어지겠지. 그래서 malloc 이런거 사용할 때 sizeof 사용 습관을 들여야 함. 그리고 만약 사전을 만들었다고 하면 파일 DB 에 저장된 데이터 크기가 32비트/64비트에서 다를 수 있기 때문에 DB 파일이 호환 안 될 수 있음. 그런거 체크해야 함.
익명(218.147)2020-04-15 16:27
처음에 소스코드를 작성할 때 이식성(portability)을 고려하여 작성했다면, 소스코드에 아무런 수정없이 컴파일, 실행까지 아무 문제 없이 정상작동함.
익명(218.147)2020-04-15 16:28
아 그리고 하드웨어 의존적인 코드나, 컴파일러/인터프리터/가상머신 등의 시스템 소프트웨어적인 성격이 강한 소스코드는 타켓 컴퓨터에 맞게 수정해야 작동함. 이식성을 고려하여 만들었다면 #define #if #else #endif 등으로 전처리기에서 그런 부분을 이미 작성해놓아서 제대로 작동할 거임. 만약 이식성 고려없이 소스코드를 작성했다면 그런 부분들을 작성해야지
익명(218.147)2020-04-15 16:31
한줄 요약하면 32비트용 소스코드를 64비트용 소스코드로 바꾸는 것은 매우 쉽지만 단지 귀찮을 뿐
포인터 장난질을 많이했으면 어려움
포인터 지랄짓하는거라던가 size_t 같은거에 의존하는 코드 있으면 그것들은 대응 다 해줘야하지
케바케지
64비트 컴퓨터에서 64비트 컴파일러로 컴파일하면 됨. 전혀 수정하지 않고 컴파일, 실행까지 아무 문제없는 경우가 많음. 예로 대부분의 오픈소스 소프트웨어들을 보면 32비트용 코드, 64비트용 코드가 따로 존재하지 않음. 그러나 32비트 변수, 64비트 변수 크기에 따라서 문제가 발생하는 경우 있음. 포인터 연산이라던가. 그런 부분에서. 그래서 애초 소스코드를 작성할 때, sizeof (int), sizeof (int *) 이런 코드를 써야 호환성이 높지. 애초 코드를 작성할 때 uint32_t, uint64_t 이런 식으로 변수를 지정했다면 문제 발생 소지가 더더욱 없음.
그리고 통신 프로그램이라면 패킷(전송/수신할 데이터)을 만들 때 32비트/64비트에 따른 변수 크기를 고려하여 uint16_t, uint32_t, uint64_t 이런 식으로 변수를 선언하지 않았다면, 비트 연산이라던가, 패킷 크기가 시스템에 따라 변동될 수 있음. 그렇게 되면 에러 떨어지겠지. 그래서 malloc 이런거 사용할 때 sizeof 사용 습관을 들여야 함. 그리고 만약 사전을 만들었다고 하면 파일 DB 에 저장된 데이터 크기가 32비트/64비트에서 다를 수 있기 때문에 DB 파일이 호환 안 될 수 있음. 그런거 체크해야 함.
처음에 소스코드를 작성할 때 이식성(portability)을 고려하여 작성했다면, 소스코드에 아무런 수정없이 컴파일, 실행까지 아무 문제 없이 정상작동함.
아 그리고 하드웨어 의존적인 코드나, 컴파일러/인터프리터/가상머신 등의 시스템 소프트웨어적인 성격이 강한 소스코드는 타켓 컴퓨터에 맞게 수정해야 작동함. 이식성을 고려하여 만들었다면 #define #if #else #endif 등으로 전처리기에서 그런 부분을 이미 작성해놓아서 제대로 작동할 거임. 만약 이식성 고려없이 소스코드를 작성했다면 그런 부분들을 작성해야지
한줄 요약하면 32비트용 소스코드를 64비트용 소스코드로 바꾸는 것은 매우 쉽지만 단지 귀찮을 뿐