Độ bền của iPhone?


10

Tôi biết iPhone (và iPad) chạy trên bộ xử lý ARM, mặc định là thiết bị đầu cuối nhỏ (và bản thân iOS là thiết bị cuối nhỏ theo trang Wikipedia); tuy nhiên, bộ xử lý ARM được cho là có khả năng chuyển đổi giữa đầu cuối nhỏ và cuối lớn. Làm thế nào có thể là điều này và làm thế nào nó hoạt động?


1
Làm thế nào câu trả lời cho câu hỏi này sẽ hữu ích để giải quyết vấn đề hoặc cải thiện trải nghiệm sử dụng iPhone của bạn? Nếu nó giải quyết một số mối quan tâm trong thế giới thực của người dùng cuối không phải là nhà phát triển, thì nó không quan trọng đến mức độ kỹ thuật, nhưng nếu câu hỏi chỉ được các nhà phát triển quan tâm, thì nó không có chủ đề ở đây.
Daniel

Ok, sau đó tôi có nên chuyển nó sang stackoverflow không?
slartibartfast

2
@myrkos Hoặc superuser.com
Dan J

6
Trước tiên hãy làm sắc nét câu hỏi. Chúng tôi đang tìm kiếm những câu hỏi ngắn mời một câu trả lời dài. Điều này áp dụng cho tất cả các trang web. SuperUser không phải là nơi dành cho các câu hỏi iOS nói chung. Chúng tôi là nơi tốt nhất cho các câu hỏi phần cứng trên iOS. Nếu bạn có một vấn đề lập trình cụ thể, thì hãy đặt câu hỏi đó và giải thích mức độ ảnh hưởng của phần cứng iOS ảnh hưởng đến câu hỏi lập trình cụ thể của bạn sẽ là cách để [SO và không phải đây là diễn đàn trong trường hợp đó]. Nếu bạn muốn có quan điểm của người dùng về vấn đề này, thật khó để thấy bất kỳ trang web nào là nơi tốt hơn để đặt câu hỏi đó hơn ở đây.
bmike

2
"ARM là một kiến ​​trúc RISC 32 bit nhỏ, được sử dụng rộng rãi bởi các thiết bị di động. Phải ghi chú lại ở đây: ARM là bi-endian (byteexual, nếu bạn muốn); bạn có thể chuyển đổi độ bền từ mức thấp nhất. iOS chỉ sử dụng nó như một endian nhỏ. Tôi dường như nhớ chip cơ sở (cũng là lõi ARM, ít nhất là với iPhone ban đầu - thực tế không bao giờ giao dịch với những người khác) là endian lớn, thật đáng buồn, bạn có thể Tôi sẽ không làm điều này ở cấp độ theo quy trình, IIRC, giống như bạn có thể với PowerPC (một đặc quyền huuuuge cho trình giả lập). " news.ycombinator.com/item?id=1527676
0x6A75616E

Câu trả lời:


6

ngay cả khi bạn nghĩ rằng bạn không cần phải biết sự kết thúc mà ai đó có thể làm. Không cần phải giải thích tại sao ai đó không cần nó bởi vì bạn có thể không biết bối cảnh. Câu hỏi không phải là "tôi cần biết về endianness" mà là "nó có phải là lớn hay nhỏ không". Vì vậy, tập trung vào chủ đề xin vui lòng!

Phải nói rằng có lẽ đó là cách tốt nhất nếu chúng ta không phát minh lại bánh xe và chỉ dựa vào các macro mà Apple cung cấp cho việc này. Lý do là vì họ đã dành khá nhiều thời gian để tối ưu hóa các macro này và đảm bảo rằng nó hoạt động tốt với trình giả lập cũng như trên Mac, iPhone và tất cả hệ điều hành và phần cứng của họ.

Nếu bạn tìm hiểu những gì đang xảy ra khi bạn gọi, CFSwapInt16BigToHostbạn có thể thấy các bình luận cho thấy các macro này đang tạo ra mã máy tốt nhất bạn có thể nhận được với sự trợ giúp của tối ưu hóa trình biên dịch:

OS_INLINE
uint16_t
_OSSwapInt16(
    uint16_t        data
)
{
  /* Reduces to 'rev16' with clang */
  return (uint16_t)(data << 8 | data >> 8);
}

OS_INLINE
uint32_t
_OSSwapInt32(
    uint32_t        data
)
{
#if defined(__llvm__)
  data = __builtin_bswap32(data);
#else
  /* This actually generates the best code */
  data = (((data ^ (data >> 16 | (data << 16))) & 0xFF00FFFF) >> 8) ^ (data >> 8 | data << 24);
#endif

  return data;
}

3

Endianness không phải là thứ mà người dùng cuối có bất kỳ tương tác thực sự nào - nhưng đây là bản tóm tắt 10.000 feet về ý nghĩa của điều này đối với người dùng các sản phẩm của Apple.

Tóm lại - độ bền cho bộ xử lý bên trong giống như hướng viết cho ngôn ngữ. Khi bạn nhìn vào các chữ cái của một văn bản tiếng Anh, tất cả chúng ta đều đồng ý bắt đầu ở phía trên bên trái và đọc đầu tiên bên phải sau đó xuống. Các ngôn ngữ khác bắt đầu ở bên phải và đọc sang trái và một số thậm chí đọc xuống trước khi di chuyển sang trái hoặc phải .

Nó không thực sự quan trọng đối với người dùng nếu các bit trong biểu diễn bên trong của một địa chỉ hoặc số được lưu trữ ở cuối nhỏ hoặc cuối lớn. Trong thực tế, OS X trên máy Mac tuân thủ một đại diện lớn và iOS tuân thủ theo thứ tự nhỏ . Thực tế này không có nghĩa là hai thiết bị không thể hoạt động cùng nhau đúng cách. Điều này hoạt động vì đại diện này chỉ xảy ra trong nội bộ và không được tiếp xúc với chúng tôi với tư cách là người dùng.


10
OSX trên PowerPC là Big Endian, trên Intel là Little Endian.
zaph
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.