Ở đây tôi đang cố gắng để làm việc với các tính năng an toàn của C#: http://ideone.com/L9uwZ5trụy lạc với an toàn C#, cấp phát bộ nhớ ngăn xếp
tôi biết, mà theo cách như vậy trong C# là tồi tệ nhất, và tôi muốn thừa nhận, rằng có một số thông tin trong chủ đề. Nhìn vào từ "perversion".
Tôi muốn triển khai sắp xếp nhanh trong C# như kiểu C thuần túy (thậm chí không phải C++). Nó có thể điên rồ, nhưng chỉ muốn nhìn sâu vào khả năng của C# không an toàn.
Tôi luôn cố gắng sử dụng stackalloc nhà điều hành. Tôi biết, rằng đó là một phân bổ từ ngăn xếp, không phải từ đống, và đó là lý do tại sao tôi nhận được thất bại với việc thực hiện chương trình của tôi.
Nhưng tôi đã nhầm lẫn khi tôi không thấy bất kỳ ngoại lệ/lỗi nào trong chương trình này.
- Tại sao tôi không nhận được bất kỳ ngoại lệ/lỗi rõ ràng nào?
Ngoài ra, như bạn nhìn thấy một phần nhận xét của mã:
struct Header
{
internal int* data;
};
Header* object_header = stackalloc Header[sizeof(Header)];
object_header->data = stackalloc int[length];
tôi không thể biên dịch nó với dòng cuối cùng. Trình biên dịch C# cho biết, trong biểu thức này stackalloc không thể sử dụng được. Tại sao? dữ liệu là int * loại, vậy tại sao lỗi xảy ra ở đây?
Tôi chỉ muốn sử dụng khung ngăn xếp và không sử dụng đống. Tôi biết, rằng có một cách khác, nhưng đó là một phân bổ từ đống.
int*[] data = new int*[length * sizeof(int)];
IntPtr result = Marshal.AllocHGlobal(Marshal.SizeOf(length * sizeof(int)));
Marshal.WriteInt32(result, 0);
for(int i = 0; i < length * sizeof(int); i++) d[i] = (int*)result;
Ví dụ: nhưng không phân bổ theo chồng.
Làm cách nào để tôi có thể giải quyết tác vụ perversion của mình, rõ ràng với cú pháp phân bổ theo chồng và thuần túy trong ngôn ngữ C#.
C# đó không được tạo cho các mục tiêu như vậy và các tính năng như vậy là ngớ ngẩn - tôi biết, nhưng câu hỏi chính không phải là về ý nghĩa, đó là về các tính năng như vậy.
Vui lòng đăng thông báo lỗi đầy đủ vì tôi hy vọng rằng nó sẽ cho chúng tôi biết * tại sao * nó không thể được sử dụng như thế. – usr
@usr có vẻ như bạn chưa đọc tốt chủ đề của tôi :) vấn đề chính là: "Nhưng tôi đã nhầm lẫn khi tôi không thấy bất kỳ ngoại lệ/lỗi nào trong chương trình này". , Tôi không nhận được bất kỳ lỗi nào, chỉ hủy bỏ việc thực thi mà không có bất kỳ báo cáo lỗi nào. – Secret
Bạn nói "Trình biên dịch C# cho biết, trong biểu thức này, stackalloc không thể được sử dụng." Đó không phải là vấn đề chính của bạn sao? – usr